在2D阵列的第一维度上进行阵列排序


array sort on the first dimension of a 2D array

我有这个数组结构

Array
(
    [xyz] => Array
        (
            [1] => 3
            [0] => s
        )
    [dds] => Array
        (
            [a] => 96
            [d] => 4
         )
...
)

如何在第一个维度上进行排序,以便将dds放在第一位。ksort不起作用(至少对我来说)。

TIA-

编辑这是我的简单代码。我将一个序列化的2D数组文件读取到一个变量中,并对其进行排序,没有什么复杂的,ksort在我的1D数组上工作没有问题。如果我注释掉ksort行,那么它运行时不会出错。

$inputfile = "xxx/result.txt";    
$builta = file_get_contents($inputfile);
$built =unserialize($builta);
    $size = sizeof($built);
    echo $size;
    echo "<br><pre>";
    print_r ($built);
    echo "</pre>";
    ksort($built);
    echo "<br><pre>";
    print_r ($built);
    echo "</pre>";

没有什么复杂的。

更新:在处理大型数组时遇到更多错误后,ksort的问题似乎是由于没有足够的内存对大型数组进行排序。tpaksu提供的解决方案是一个很好的解决方案。

使用ksort。

ksort($array);

我假设您的数组的名称是$my_array;然后你可以使用这样的东西:

<?php
$my_array = array(z => array(p=>1,gf=>"d"),v=>array(l=>"m",fr=>"3"));
var_dump($my_array);
$sorted_keys = array_keys($my_array);
sort($sorted_keys,SORT_STRING);
$new_array = array();
var_dump($sorted_keys);
foreach($sorted_keys as $key){
    $new_array[$key] = $my_array[$key];
}
var_dump($new_array);
?>

但是是的ksort会更好更简单。

编辑:对不起,我的错。使用sort作为内联函数是一个错误。这是经过更新、测试和工作的代码。

有一个PHP函数uksort(),它根据键对数组进行排序。但你必须建立自己的比较函数
你可以在这里得到这个函数的文档。