и остерегайтесь, потому что некоторые элементы в массиве 'ppp' не будут иметь свойства redirect_url (вместо этого у второго есть свойство pixel_redirect_url).

ься с этим за то, что кажется, навсегда.

У меня есть массив:

$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;

Буду признателен за любую помощь.

 Linus Kleen07 янв. 2011 г., 15:45
Вы проходите через$url_array или через$url_array['ppp']?

Ответы на вопрос(6)

id, который будет делать оценки только для элемента 0

вам нужен для Лоо

for($i = 0; $i < count($piggies_array['ppp']); $i++)
{
    $id = $value[$i]->id;
    $redirect_url = $value[$i]->redirect_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: ... )

Удачи!

вызвав$value[0] вы запрашиваете только первый элемент во втором массиве. Вам понадобятся два цикла, не забывая, что значение не может быть массивом:

    foreach ($piggies as $var)
    {
        if (is_array($var))
        {
            foreach ($var as $obj)
            {
                echo $obj->redirect_url;
            }
        }
        else 
        {
            echo $var;
        }
    }

Вышесказанное(не проверено) будет выводить каждый URL, а также выводит элемент общего количества первого массива.

Решение Вопроса

Это должно сделать трюк:

foreach ($url_array['ppp'] as $key => $object) {
    echo $object->redirect_url;
}
 Dan07 янв. 2011 г., 16:37
Благодарю. 1 цикл работает для меня, и с другими постами я понимаю, где я ошибся.
 cocacola0907 янв. 2011 г., 15:54
лучшее решение, только одна петля.

Вам нужно дважды просмотреть массив.

foreach($piggies as $piggy) {

foreach($piggy as $key=>$value) {

$id = $value->id;
$redirect_url = $value->redirect_url; 

}

}

цикл, как это (при условии, что$piggies_array такой же как$url_array ты свалил)

foreach ($piggies_array['ppp'] as $key => $value) {
   $id = $value->id;
   $redirect_url = $value->redirect_url; 
}

и остерегайтесь, потому что некоторые элементы в массиве 'ppp' не будут иметь свойства redirect_url (вместо этого у второго есть свойство pixel_redirect_url).

Ваш ответ на вопрос