Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » foreach как правильно

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
Помогите со скриптом (PHP)

Код:
 
<?php
header('Content-Type: text/html; charset=utf-8');
$coordinates = htmlspecialchars($_POST['coordinates']);
if(!empty($coordinates)) {
    $ch = curl_init('http://siteapi.estaxi.org/drivers/gps/'.$coordinates);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7');
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, '1');
    $text = curl_exec($ch);
    curl_close($ch);
    $ar = json_decode($text, true);
    foreach($ar['CARS'] as $car) {
           if ($car['id_organization'] != '79098069'){
            $car = null;
          }
    }
    $ar = array_filter($ar['CARS']);
    echo json_encode($ar);
}
?>
 

По идеи скрипт должен получить и отфильтровать не нужное, но он возвращает все.
почему то не выполняется

Код:
 
foreach($ar['CARS'] as $car) {
           if ($car['id_organization'] != '79098069'){
            $car = null;
          }
    }
 

 
Помогите пожалуйста.

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 13:41 12-12-2014
ManHunter



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
для примера  
 

Код:
foreach ($arr as $key=>$value) {
  if ($value!='some') {
    unset($arr[$key]);
  }
}


----------
"На любое мое движение ваша реакция предусмотрена,
В лучшем случае - равнодушие, в худшем случае - патология..." (C) Егор Летов

Всего записей: 3091 | Зарегистр. 20-03-2004 | Отправлено: 14:30 12-12-2014
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ничего у меня не выходит...
Кому не трудно откройте браузером http://siteapi.estaxi.org/drivers/gps/70000001
получите массив данных.
Как его отфильтровать? Оставить только где id_organization= 79098069

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 14:42 12-12-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
koreets2011
Вы тут сильно наезжали на кого то, кто не использует хтмл5, а сами никак запомнить не можете об указании языка в названии темы.
 
foreach делает копию элемента, поэтому для модификации оригинала нужно либо, как и написали, обращаться по ключу, либо использовать указатель  
 
foreach($arr as &$el)
 
Но модифицировать массив по которому идёт цикл - очень и очень плохо.
Можно использовать свою коллбэк функцию в той же array_filter

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 17:36 12-12-2014 | Исправлено: Mavrikii, 17:37 12-12-2014
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну начнем с того, что  я не наезжал. А спросил, почему не использовать HTML5 вместо HTML4.
А по теме, я сделал асинхронный запрос к скрипту, и уже при помощи JS извлек необходимые данные.
Что касается PHP то там, скрипт то фильтровал, то не фильтровал. Проблему то я решил, но все таки мне очень интересно, почему приведенный мною скрипт рандомно выполнял работу?

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 18:29 12-12-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Но модифицировать массив по которому идёт цикл - очень и очень плохо.  
Можно использовать свою коллбэк функцию в той же array_filter

тут сорри, засмотрелся на фильтр и почему в голову влезло, что удаляются элементы в цикле.
 

Цитата:
 почему приведенный мною скрипт рандомно выполнял работу

сравните вывод

Код:
$arr = array(1,2,3,4);
 
foreach($arr as $el)
  $el = null;
   
var_dump($arr);
 
foreach($arr as &$el)
  $el = null;
 
var_dump($arr);

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:24 12-12-2014
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
&
Понял вроде

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 21:35 12-12-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Понял вроде

но еще проще
 

Код:
var_dump(array_filter($arr, function($k) {
    return $k['id_organization'] == '79098069';
}));

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:37 12-12-2014 | Исправлено: Mavrikii, 21:38 12-12-2014
koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо...

Всего записей: 410 | Зарегистр. 13-10-2011 | Отправлено: 21:42 12-12-2014
dgorbash

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ничего у меня не выходит...
Кому не трудно откройте браузером http://siteapi.estaxi.org/drivers/gps/70000001
получите массив данных.
Как его отфильтровать? Оставить только где id_organization= 97909806

 
Рекомендую делать так: http://siteapi.estaxi.org/drivers/gps/70000001/97909806
И да, нет острой необходимости выставлять юзер-агент, без него вас не забанит.

Всего записей: 1 | Зарегистр. 10-06-2011 | Отправлено: 11:52 12-01-2015
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » foreach как правильно


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru