2014-03-24 141 views
0

我想取消设置对象中的某些内容。在对象中取消设置属性

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) 
+0

什么意思 - 打破了一切?任何真正的错误消息? – vikingmaster

+0

打破一切?什么是错误? – Kamehameha

+0

没有错误,我尝试后没有任何呈现。 – jrabramson

回答

2

相反的:

unset($curdel[$key]); 

尝试:

unset($curdel->$key); 

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

+0

这家伙,这个家伙知道怎么回事。 – jrabramson

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 ; 

数字索引是有点儿无效,并且只能通过以下方式访问特殊语法如:

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

+0

该foreach,如果似乎没有问题,因为这两个print_r正在关闭。 – jrabramson

+0

说真的,只是解释你有什么输入和你需要得到什么样的最终结果。发布更多可能导致问题的代码,我们将帮助您。 '打破一切'与'ERROR_NOT_FOUND'相同 – vikingmaster

+0

我认为这是一个很好的答案,根据当时可用的信息:'object!= object array'! – halfer