我有这个问题前面,结论是在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));
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top