另一个php数组循环问题

时间:2011-01-07 14:41:03

标签: php arrays loops multidimensional-array

正在与这个似乎一如既往的斗争。

我有一个数组:

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

我将不胜感激。

6 个答案:

答案 0 :(得分:8)

这应该可以解决问题:

foreach ($url_array['ppp'] as $key => $object) {
    echo $object->redirect_url;
}

答案 1 :(得分:1)

你需要遍历数组两次。

foreach($piggies as $piggy) {

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

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

}

}

答案 2 :(得分:0)

你在做$ id = $ value [0] - > id,它只会执行0元素的语句

你需要一个厕所

for($i = 0; $i < count($piggies_array['ppp']); $i++)
{
    $id = $value[$i]->id;
    $redirect_url = $value[$i]->redirect_url;
}   

答案 3 :(得分:0)

您的数组通过调用$value[0]包含另一个数组,您只需要第二个数组中的第一个项目。你需要两个循环,不要忘记值可能不是数组:

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

以上(未经测试)将输出每个URL,并且还将输出第一个数组的总计数项。

答案 4 :(得分:0)

您正在迭代数组的第一个维度,该维度只有"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: ... )
祝你好运!

答案 5 :(得分:0)

这样循环(假设$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属性。