【问题标题】:Another php array looping question另一个php数组循环问题
【发布时间】:2011-06-05 07:47:58
【问题描述】:

一直在与这个人战斗,似乎是永远。

我有一个数组:

$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']

标签: php arrays loops multidimensional-array


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您正在遍历数组的第一个维度,该维度只有 "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: ... )
    

    祝你好运!

    【讨论】:

      【解决方案3】:

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

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

      上面的(未测试)会输出每个URL,也会输出第一个数组的总count项。

      【讨论】:

        【解决方案4】:

        你在做 $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;
        }   
        

        【讨论】:

          【解决方案5】:

          你需要遍历数组两次。

          foreach($piggies as $piggy) {
          
          foreach($piggy as $key=>$value) {
          
          $id = $value->id;
          $redirect_url = $value->redirect_url; 
          
          }
          
          }
          

          【讨论】:

            【解决方案6】:

            这应该可以解决问题:

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

            【讨论】:

            • 最佳方案,只有一个循环。
            • 谢谢。 1 个循环对我有用,对于其他帖子,我知道我哪里出错了。
            猜你喜欢
            • 2021-06-05
            • 2011-07-01
            • 2015-10-30
            • 1970-01-01
            • 2018-04-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-09
            相关资源
            最近更新 更多