题
我有这个问题前面,结论是在5.2.5中的错误。那么,它仍然打破了5.2.6,至少对我来说:
请让我知道,如果是损坏或为你的作品:
$obj = new stdClass();
$obj->{"foo"} = "bar";
$obj->{"0"} = "zero";
$arr = (array)$obj;
//foo -- bar
//0 -- {error: undefined index}
foreach ($arr as $key=>$value){
echo "$key -- " . $arr[$key] . "\n";
}
任何的方式来“修复”它已经从一个stdClass的铸造后的数组?
解决方案
绝对似乎是一个错误,我(PHP 5.2.6)。
可以修复此类阵列:
$arr = array_combine(array_keys($arr), array_values($arr));
它的报道在这个bug报告但标记为假.. 。 说的文档:
中的键是成员变量 名字,有几个显着的例外: 整数性质是不可访问;
其他提示
实验的位表示PHPS自身的功能不会持续这个fubarity。
function noopa( $a ){ return $a; }
$arr = array_map('noopa', $arr );
$arr[0]; # no error!
这在效果,仅创建数组的副本,并且在复制过程中发生的修补程序。
最后,它的全线设计失败,尝试你觉得它与混合数字和字符串数组中的键的方式使用array_merge?
所有编号的元素被复制有些被重新编号,即使有些只是恰巧是字符串封装的号码,作为结果,有几十array_merge的自制软件实现的正好解决了这一问题。
回到当PHP试图使perl的的克隆和失败,他们没把握数组和散列是不同的概念的概念,而不是一个晶片被保护它们一起放到一个万向伞。好去!
有关他们的下一个把戏,他们成功突破,因为没有其他语言对遇到的一些原因,一些技术问题的命名空间的分隔符。
感谢RoBorg ..我刚发现,以及:)
下面是另一种解决办法,不知道这是否是快与否:
unserialize(serialize($arr));
不隶属于 StackOverflow