【问题标题】:Why is foreach over a results object not working?为什么对结果对象的 foreach 不起作用?
【发布时间】:2013-03-16 21:56:48
【问题描述】:

我知道有很多此类问题,但我无法使用其他帖子解决我的问题,所以我希望这里的人可以帮助我。

我有一个要从 Yahoo 本地搜索 API 返回的对象。我已将结果传递给json_decode(),并将结果保存到$yahoo_json_decoded。我可以使用 for 循环从结果中获取数据并执行以下操作:

echo 'Name: ' . $yahoo_json_decoded->ResultSet->Result[$i]->Title . '<br />' ;

但我似乎无法使 foreach 工作:

foreach($yahoo_json_decoded->ResultSet as $res=>$variable)
{
    $listingID = $yahoo_json_decoded->ResultSet[$res]->id ;
    echo $listingID;
}

我可以循环数据并继续前进,但我真的很想了解为什么 foreach 不起作用。

谢谢(怜悯)

柯克

【问题讨论】:

    标签: php object foreach yahoo-api


    【解决方案1】:

    据我了解,你应该这样做

    foreach($yahoo_json_decoded->ResultSet->Result as $key => $val) //(...)
    

    【讨论】:

      【解决方案2】:

      两个循环的字面区别

      sn-p 中的for 循环遍历数组 $yahoo_json_decoded-&gt;ResultSet-&gt;Result,而foreach 循环遍历对象 $yahoo_json_decoded-&gt;ResultSet.

      换句话说,在for 循环中,您正在按预期迭代数组元素,而在foreach 循环中,您实际上是遍历对象属性

      差异演示

      例如,给定这个对象:

      $json = json_encode(array('result'=>array('apple','orange','lemon')));
      $obj  = json_decode($json);
      

      考虑一下这个循环的区别:

      for ($i=0; $i < count($obj->result); $i++) :
          echo $i.' - '.$obj->result[$i].' ';
      endfor;
      

      还有这个循环:

      foreach ($obj as $key=>$val) :
          echo $key.' - ';
          var_dump($val);
      endforeach;
      

      第一个循环的输出将是:

      0 - apple 1 - orange 2 - lemon
      

      虽然第二个的输出是:

      result - array(3) { [0]=> string(5) "apple" [1]=> string(6) "orange" [2]=> string(5) "lemon" }
      

      See the difference in action

      【讨论】:

      • Boaz,谢谢你的详细解释。这让我更容易理解我做错了什么。
      • Boaz,老实说,我什至没有注意到这一点。我想当你对其他事情有想法时,很容易错过你脸上的事情。已接受答案。
      【解决方案3】:

      你的 foreach 循环中缺少一层数据结构

      foreach($yahoo_json_decoded->ResultSet->Result as $res=>$variable)
      {
         $listingID = $variable->id ;
          echo $listingID;
      }
      

      与你的 for 循环相比

      for ($i = 0; $i <10; $i++)
      $yahoo_json_decoded->ResultSet->Result[$i]->Title
      

      因此

      $i = $res
      $variable = $yahoo_json_decoded->ResultSet->Result[$i]
      

      【讨论】:

      • 谢谢大卫。我现在开始有了更好的理解。
      【解决方案4】:

      基于您所说的$yahoo_json_decoded-&gt;ResultSet-&gt;Result[$i]-&gt;Title 有效:

      foreach($yahoo_json_decoded->ResultSet->Result as $index => $result)
      {
         $listingID = $result->id ;
          echo $listingID;
      }
      

      【讨论】:

        猜你喜欢
        • 2022-01-17
        • 2023-01-12
        • 1970-01-01
        • 2019-06-28
        • 1970-01-01
        • 2019-01-27
        • 2013-11-02
        • 2011-10-04
        • 2022-01-25
        相关资源
        最近更新 更多