Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.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 按键名对深度多维数组或结果JSON排序_Php_Arrays_Json_Sorting_Multidimensional Array - Fatal编程技术网

Php 按键名对深度多维数组或结果JSON排序

Php 按键名对深度多维数组或结果JSON排序,php,arrays,json,sorting,multidimensional-array,Php,Arrays,Json,Sorting,Multidimensional Array,我试图按键名对一个相当大的多维数组进行排序(而不是值),但我也需要它尽可能快 生成的数组将转换为JSON并保存在一个文件中,所以如果有一种按键对JSON排序的方法,这就是我所需要的 我正在有效地寻找与Python等价的PHPjson.dumps(dict,sort\u keys=True,indent=4)为每个数组项编写一个递归函数: function ksort_recursive(array &$a) { ksort($a, SORT_NATURAL | SORT_FLAG_C

我试图按键名对一个相当大的多维数组进行排序(而不是值),但我也需要它尽可能快

生成的数组将转换为JSON并保存在一个文件中,所以如果有一种按键对JSON排序的方法,这就是我所需要的


我正在有效地寻找与Python等价的PHP
json.dumps(dict,sort\u keys=True,indent=4)
为每个数组项编写一个递归函数:

function ksort_recursive(array &$a) {
  ksort($a, SORT_NATURAL | SORT_FLAG_CASE);

  foreach ($a as $k => $v) {
    if (is_array($v)) {
      ksort_recursive($a[$k]);
    }
  }
}

谢谢,但这是我试图避免的,因为这个函数的执行需要+-0.01秒(从我的测试来看,通常大约是
0.009605884552秒
)和IMO,这是一个非常长的时间,而且我不确定它对CPU的负载有多大。这是唯一可能/最快的方法吗?您真的需要在服务器端使用它吗?如果只用于调试,那么考虑客户端上的排序,即在JavaScript中进行排序。总有更好的办法,但我找不到。总之,基本的快速排序算法是最好的。如果您真的需要在服务器端对数组进行排序,我能给出的最好建议是用C(PHP扩展)实现上述函数。这将消除PHP函数调用的开销。啊,如果有很多空数组,检查空数组将减少一些迭代:
if(is_array($v)&&&v){ksort_recursive($a[$k])}
。可以使用
RecursiveArrayIterator
实现这一点。它可能会节省一些内存,但我怀疑它会更快。这必须是服务器端,用PHP。用户上传一个反编译文件,服务器存储原始二进制文件和反编译的json文件(网站只使用json文件,但用户可以下载binray文件)。我需要它的排序,因为有时二进制文件可能会被奇怪地损坏,你必须手动通过反编译版本,并找到问题。此外,几乎没有空数组。对我来说,速度和服务器负载一样重要,但我不会建造火箭来节省0,01%的内存或获得1微秒。@MiChAeLoKGB,您可以存储未排序的JSON并为后台作业安排排序(通过crontab运行的脚本)。
array(
    'common' => array(
        'abc' => 'something',
        'gka' => 'something',
        'lfi' => 'something',
        'zyu' => 'something',
    ),
    'data_1' => array(
        // Array with lots of values and another arrays inside
    ),
    'data_result' => array(
        'abc' => 'something'
        'doc' => array(
            34154 => array(
                'abc' => 'something'
                'eks' => 'something',
                'lfk' => 'something',
            )
            66145 => array(
                'abc' => 'something'
                'eks' => 'something',
                'lfk' => 'something',
            ),            
        ),
        'llo' => 'something',
        'zus' => array(
            // some data
        ),
    ),
    'post' => array(
        'id' => 15525,
        'something' => 'something'
        'time' => 156652363,
    )
);
function ksort_recursive(array &$a) {
  ksort($a, SORT_NATURAL | SORT_FLAG_CASE);

  foreach ($a as $k => $v) {
    if (is_array($v)) {
      ksort_recursive($a[$k]);
    }
  }
}