【问题标题】:Unsetting properties in an object取消设置对象中的属性
【发布时间】:2014-05-02 10:33:15
【问题描述】:

我正在尝试取消设置对象中的某些内容。

foreach($curdel as $key => $value) {
if ($value == $deletedinfo[0]) {
    print_r($key);
    print_r($curdel);
    unset($curdel[$key]);
}
}

正如预期的那样,$key 返回正确的值 (0),$curdel 返回整个数组。但是尝试取消设置 $curdel[$key] 会破坏一切。甚至试图 print_r($curdel[$key]) 破坏一切,我错过了什么?

我的对象如下所示:

stdClass Object ( [0] => IFSO14-03-21-14.csv [2] => EB_Bunny.jpg [3] => EB_White_Bear.jpg )

【问题讨论】:

  • 什么意思 - 破坏一切?有任何真正的错误消息吗?
  • 破坏一切?错误是什么?
  • 没有错误,我尝试后没有任何渲染。
  • print_r $curdel 返回:stdClass Object ( [0] => IFSO14-03-21-14.csv [2] => EB_Bunny.jpg [3] => EB_White_Bear.jpg )
  • 所以你知道以后的问题,这个数据结构是一个具有数字属性的对象,而不是一个“对象数组”。我怀疑如果你使用这个短语,人们会认为你的意思是一个实现 Iterator 接口的类。

标签: php arrays unset


【解决方案1】:

代替:

unset($curdel[$key]);

试试:

unset($curdel->$key);

数组通过 [] 访问/修改,但对象和类属性通过 ->

【讨论】:

  • 这家伙,这家伙知道怎么回事。
【解决方案2】:

该问题的可能解决方案是添加对$value 变量的引用:

foreach($curdel as $key => &$value) { //Note & sign
   if ($value == $deletedinfo[0]) {
       print_r($key);
       print_r($curdel);
       unset($curdel[$key]);
   }
}

&$value 表示对实际数组元素的引用

也基于这个(类似的)示例回答:Unset an array element inside a foreach loop

更新

基于您的输入(STDClass 而不是数组):只需先将 $curdel 转换为数组即可:

$curdel = (array) $curdel ;

对象中的数字索引有点无效,只能通过特殊语法访问,例如:

$object->{'0'} ;

这是一个非常糟糕的做法。

【讨论】:

  • foreach 和 if 似乎不是问题,因为两个 print_r 正在关闭。
  • 说真的,只是解释一下你有什么输入以及你需要得到什么最终结果。发布更多可能导致问题的代码,我们将为您提供帮助。 Breaks everythingERROR_NOT_FOUND 相同
  • 根据当时可用的信息,我认为这是一个很好的答案:object != object array!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 2011-09-23
相关资源
最近更新 更多