取消设置对象中的属性
Posted
技术标签:
【中文标题】取消设置对象中的属性【英文标题】: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
接口的类。
【参考方案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 everything
与 ERROR_NOT_FOUND
相同
根据当时可用的信息,我认为这是一个很好的答案:object != object array
!以上是关于取消设置对象中的属性的主要内容,如果未能解决你的问题,请参考以下文章
设置 DirectoryUrl 属性时,UIDocumentPickerViewController 中的取消按钮不可用