PHP 无法取消设置对象内的数组元素


PHP can't unset array element inside object

我已经查看了有关取消设置元素的所有问题,我没有犯任何错误,但是在我取消设置元素后,元素仍然存在。

更新:我在下面加入了理查德伯纳德的建议,但这仍在发生:

    foreach($oldObject AS $key1=>$val1)
    {
        if (!empty($val1)) 
        {
            $newObject->$key1 = $val1;
            if (is_array($oldObject->$key1)) 
            {
                foreach ($oldObject->$key1 as $key2 => $val2) 
                {
                    if (empty($val2)) 
                    {
                        print('Found to be empty: unsetting newObject->' . $key1 . '[' . $key2 . ']');
                        unset($newObject->$key1[$key2]);
                        if (array_key_exists($key2, $newObject->$key1)) 
                        {
                            print('The key ' . $key2 . ' still exists. What is going on?');
                        }
                    } 
                }
            }
        }
    }

在此代码中,文本"密钥仍然存在。这是怎么回事?"每次都在打印。

我必须取消设置空元素,因为我正在对该对象进行 SOAP 调用,如果其中有任何空字符串,SOAP 会拒绝该对象。但是为什么$newObject->$var[$key]在我显式取消设置后仍然存在?

是因为我试图在对象中取消设置数组的元素吗?

任何帮助将不胜感激。

这是因为您在数组上取消了 foreach 中的变量设置......这是不可能的。解决此问题的最简单方法是复制数组并在第一个数组上 foreach,删除第二个数组中的键......然后在代码中进一步使用第二个数组。

漫长的方法是使用 array_walk() 等函数或将要取消设置的密钥存储在不同的数组中,并在 foreach 之后取消设置它们......