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

时间:2014-11-20 10:49:49

标签: php arrays soap unset

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

更新:我已在下面纳入了RichardBernards的建议,但这种情况仍然存在:

    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]在我明确取消之后仍然存在?

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这是因为你在数组中取消了foreach中的变量...这是不可能的。最简单的解决方法是将数组和foreach复制到第一个数组上,删除第二个数组中的键...比在代码中进一步使用第二个数组。

很长的路要走是使用像array_walk()这样的函数,或者存储你想要在不同数组中取消设置的键,并在foreach之后取消它们...