Php 排序对象数组
让我们假设我有这个:Php 排序对象数组,php,arrays,json,sorting,object,Php,Arrays,Json,Sorting,Object,让我们假设我有这个: <?php $obj=(object)array("this"=>"that","and"=>"the","other"=>(object)array("layers"=>"make","things"=>"more","fun"=&
<?php
$obj=(object)array("this"=>"that","and"=>"the","other"=>(object)array("layers"=>"make","things"=>"more","fun"=>(object)array("every"=>"time","foo"=>"bar")));
var_dump($obj);
?>
但我希望它最好是按这样的键排序,而不必创建一个数组或任何一层键,对其排序并按顺序重建对象
像这样:
object(stdClass)#3 (3) {
["and"]=>
string(4) "the"
["other"]=>
object(stdClass)#2 (3) {
["fun"]=>
object(stdClass)#1 (2) {
["every"]=>
string(4) "time"
["foo"]=>
string(3) "bar"
}
["layers"]=>
string(4) "make"
["things"]=>
string(4) "more"
}
["this"]=>
string(3) "that"
}
我认为web浏览器会自动进行排序,因为我似乎记得几年前我在firfox中创建了一个自定义排序功能时必须解决这个问题,所以我可以对它进行json\u编码
并让客户端处理这部分,这样浏览器就可以对它进行排序,而不需要我进行排序
// Just sort and return the sorted array
function array_ksort(array $array) {
ksort($array);
return $array;
}
$obj = (object) array_ksort(array_map(function($value) { return !is_object($value) ? $value : (object) array_ksort((array) $value);}, $obj));
检查这里的结果:我试错了吗?(在终端中测试)您必须在第二个
var_dump
中施放$obj
,这是正确的版本:
谢谢,看起来很管用;虽然我已经在JS中重写了代码,但仍然必须对其进行排序…至少在第3层中,更正似乎不能100%正确地对真实数据进行排序,我就是这样做的:不:在将数组强制转换为对象之前,需要这样做。
// Just sort and return the sorted array
function array_ksort(array $array) {
ksort($array);
return $array;
}
$obj = (object) array_ksort(array_map(function($value) { return !is_object($value) ? $value : (object) array_ksort((array) $value);}, $obj));