在类型转换期间防止重复键的最佳方法是什么?
示例:
//Credits @bwoebi $obj = (object)array(1,2,3); $obj->{1} = "Duplicate key 1"; $obj->{2} = "Duplicate key 2"; $obj->{3} = "Duplicate key 3"; $array = (array)$obj ; print_r($array);
产量
Array ( [0] => 1 [1] => 2 [2] => 3 [1] => Duplicate key 1 [2] => Duplicate key 2 [3] => Duplicate key 3 )
现在我知道一些聪明的人会说它,因为一个键是字符串而另一个int使用var_dump
var_dump($array);
产量
array (size=6) 0 => int 1 1 => int 2 2 => int 3 '1' => string 'Duplicate key 1' (length=15) '2' => string 'Duplicate key 2' (length=15) '3' => string 'Duplicate key 3' (length=15)
但主要问题是没有办法获得钥匙
echo $array['1'],PHP_EOL; //Expected Duplicate key 1 echo $array[1],PHP_EOL;
产量
2 2
没有循环,是否有解决此问题的方法?显然我永远不会犯这个错误,除非@PeeHaa埽再次成为啤酒,但我认为任何答案都应该帮助受过良好教育的PHP开发人员.
注意.
– 这可以通过array_values,sort或任何改变键位置的PHP函数轻松解决
例
sort($array); print_r($array);
产量
Array ( [0] => Duplicate key 1 [1] => Duplicate key 2 [2] => Duplicate key 3 [3] => 1 [4] => 2 [5] => 3 )
您可以使用
array_values功能重置阵列键.
试试这个:
$obj = (object)array(1,3); $obj->{1} = "Duplicate key 1"; $obj->{2} = "Duplicate key 2"; $obj->{3} = "Duplicate key 3"; $array = (array)$obj ; $array = array_values($array); print_r($array);
产生这个:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => Duplicate key 1 [4] => Duplicate key 2 [5] => Duplicate key 3 )
或者您甚至可以在转换之前使用array_values,如下所示:
$array = array_values((array)$obj);
希望这可以帮助!