Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 排序对象数组_Php_Arrays_Json_Sorting_Object - Fatal编程技术网

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));