Борьба с этим за то, что кажется, как всегда.
У меня есть массив:
$url_array
Он содержит эту информацию:
Array ( [ppp] => Array ( [0] => stdClass Object ( [id] => 46660 [entity_id] => 0 [redirect_url] => http://www.google.com [type] => Image ) [1] => stdClass Object ( [id] => 52662 [entity_id] => 0 [pixel_redirect_url] => http://www.yahoo.com [type] => Image ) [2] => stdClass Object ( [id] => 53877 [entity_id] => 0 [redirect_url] => http://www.msn.com [pixel_type] => Image ) ) [total_count] => 3 )
Мне нужно пройти через него и делать вещи каждой переменной. Я могу заставить это работать:
foreach ($piggies_array as $key => $value) { $id = $value[0]->id; $redirect_url = $value[0]->redirect_url; }
Неудивительно, что это только отражается на первом значении этих переменных, но независимо от того, что я пытаюсь, я не могу заставить его пройти:
$value->redirect_url; $value=>redirect_url;
Буду признателен за любую помощь.
Это должно сделать трюк:
foreach ($url_array['ppp'] as $key => $object) { echo $object->redirect_url; }
Вам нужно пройти через массив дважды.
foreach($piggies as $piggy) { foreach($piggy as $key=>$value) { $id = $value->id; $redirect_url = $value->redirect_url; } }
ваше значение $ id = $ value [0] -> id, которое будет выполнять только статуты для элемента 0
вам нужно для loo
for($i = 0; $i < count($piggies_array['ppp']); $i++) { $id = $value[$i]->id; $redirect_url = $value[$i]->redirect_url; }
Ваш массив содержит другой массив, вызывая $value[0]
вы запрашиваете только первый элемент во втором массиве. Вам понадобятся два цикла, не забывая, что значение может не быть массивом:
foreach ($piggies as $var) { if (is_array($var)) { foreach ($var as $obj) { echo $obj->redirect_url; } } else { echo $var; } }
Вышеупомянутый (не тестируемый) выводят каждый URL-адрес, а также выводит общий счетный элемент первого массива.
Вы выполняете итерацию по первому размеру массива, который имеет только элемент "ppp"
. Проверьте свой код, и вы увидите, что вы действительно запрашиваете первый элемент массива, когда у вас есть 3 элемента.
Что вам нужно сделать, итерация в массив объектов ( $url_array["ppp"]
).
Когда вы сомневаетесь в том, что вы на самом деле выполняете, хороший способ начать отлаживать его, печатает каждый шаг итерации. Если вы сделаете это на примере, который вы опубликовали, вы увидите следующее:
Array( [0] => stdClass [...], [1] => stdClass [...] ... )
делая это:
foreach ($piggies_array as $key => $value) { var_dump($value); }
Посмотрев на это, вы автоматически узнаете, в чем проблема. Итак, изменив его на:
foreach ($piggies_array['ppp'] as $key => $value) { var_dump($value); }
Вы получите нужный результат:
Object ( id: ... ) Object ( id: ... ) Object ( id: ... )
Удачи!
loop, как это (при условии, что $piggies_array
совпадает с $url_array
вы сбросили):
foreach ($piggies_array['ppp'] as $key => $value) { $id = $value->id; $redirect_url = $value->redirect_url; }
и обратите внимание, потому что некоторые элементы в массиве «ppp» не будут иметь свойство redirect_url (hte second имеет свойство pixel_redirect_url.