【问题标题】:stdClass Cannot use [] fatal errorstdClass 不能使用 [] 致命错误
【发布时间】:2015-03-14 01:20:42
【问题描述】:

我正在尝试迭代 stdClass 对象中数组中保存的 img 数据。我已经能够让 stdClass 做我希望的所有其他事情,试图让图像序列/迭代出来让我望而却步。我查看了 php.net 并通读了堆栈以获取我可以理解的答案,这解释了我所遇到的错误,除了没有成功地用谷歌搜索答案。我现在很困惑,尝试了很多很多东西都没有成功。

$myObj = new stdClass;
$myObj->image=['x01.jpg', 'x02.jpg', 'x03.jpg', 'x04.jpg', 'x05.jpg'];
$myObj->name="asdfg";
$myObj->phone="exaasdfaspg";
$myObj->email="exsdfg";

$myObjArray[] = $myObj;

foreach($myObjArray as $myObj)
{ echo '<img src="_imgResevior/' . $myObj->image[] . '"/>' ;}
#{ echo (in_array('<img src="_imgResevior/' . $myObj->image['image'] . '"/>')) ;}

【问题讨论】:

  • $myObj-&gt;image[] 无效,除非您附加到数组,即$myObj-&gt;image[] = 'newfile.jpg';。使用$myObj-&gt;image[0] 或您尝试访问的任何元素。或foreach ($myObj-&gt;image as $image) { ... } 在您的第一个foreach 中。请注意,如果您希望使用最初在 foreach 之后声明的 $myObj,那么重复使用变量名 ($myObj) 也会导致不可预知的结果。
  • 试试foreach($myObj-&gt;image as $myObjArray )
  • 问题不清楚,请说明在迭代数组方面有什么不清楚的地方?
  • @sjagr 纠正了foreach 的错误,我认为你对答案投了反对票

标签: php arrays object foreach stdclass


【解决方案1】:
foreach($myObjArray as $myObj)
{ echo '<img src="_imgResevior/' . $myObj->image[] . '"/>' ;}

应该是

foreach($myObj->image as $myObjArray )
{ echo '<img src="_imgResevior/' . $myObjArray . '"/>' ;}

输出的html代码是

<img src="_imgResevior/x01.jpg">
<img src="_imgResevior/x02.jpg">
<img src="_imgResevior/x03.jpg">
<img src="_imgResevior/x04.jpg">
<img src="_imgResevior/x05.jpg">

【讨论】:

  • 我先写了答案,你接受了他的答案,但没关系
  • 为什么你把foreach里面的值命名为$myObjArray我觉得这个名字含糊不清。
  • 这就是他想要的foreach($myObjArray as $myObj) 这是他的代码,我刚刚交换了它并为$myObj添加了-&gt;image
【解决方案2】:

您不能将对象作为数组访问。如果你想要这个,你需要实现ArrayAccess Interface

要让您的代码正常工作,只需将 foreach 更改为:

foreach($myObj->image as $img)
{ 
  echo '<img src="_imgResevior/' . $img . '"/>';
}

【讨论】:

  • 谢谢你,这有效。还要感谢你给我指点我在学校吃午饭时会读到的 ArrayAccess 接口;第二个答案也有效。感谢您的帮助,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多