另一个关于 PHP 数组循环的问题

3

我已经为此苦战了很久。

我有一个数组:

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

我需要帮助,非常感谢。


你是在循环遍历 $url_array 还是 $url_array['ppp'] - Linus Kleen
6个回答

8
这应该能解决问题:
foreach ($url_array['ppp'] as $key => $object) {
    echo $object->redirect_url;
}

最佳解决方案,仅一个循环。 - cocacola09
谢谢。一个循环对我有用,通过其他帖子,我明白了自己哪里出错了。 - Dan

1
你需要两次循环遍历数组。
foreach($piggies as $piggy) {

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

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

}

}

0

你正在执行 $id = $value[0]->id,这只会针对第 0 个元素执行语句

你需要一个 for 循环

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

0

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

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

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

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: ... )

祝你好运!


0
像这样循环(假设您转储的$url_array$piggies_array相同):
foreach ($piggies_array['ppp'] as $key => $value) {
   $id = $value->id;
   $redirect_url = $value->redirect_url; 
}

要注意的是,'ppp' 数组中的某些项可能没有 redirect_url 属性(第二个具有 pixel_redirect_url 属性)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接