Php 自然地按键对多维数组进行排序

Php 自然地按键对多维数组进行排序,php,arrays,sorting,Php,Arrays,Sorting,我在php中有一个多维数组,我想根据键值对数组进行自然排序。有关阵列: array(27) { ["user1"]=> array(1) { ["link"]=> string(24) "http://twitch.tv/example" } ["someotheruser"]=> array(1) { ["link"]=> string(24) "http://twitch.tv/exa

我在php中有一个多维数组,我想根据键值对数组进行自然排序。有关阵列:

array(27) {
  ["user1"]=>
  array(1) {
        ["link"]=>
        string(24) "http://twitch.tv/example"
  }
  ["someotheruser"]=>
  array(1) {
        ["link"]=>
        string(24) "http://twitch.tv/example"
  }
  ["anotheruser"]=>
  array(1) {
        ["link"]=>
        string(24) "http://twitch.tv/example"
  }
  // etc...
}
到目前为止,我已经尝试了一些事情,但我没有运气。将
uksort
与natsort一起使用是行不通的,如果不需要的话,我也不想为自然排序顺序编写自定义比较器。我还尝试单独对键进行排序,但这似乎不起作用

private function knatsort(&$array) {
    $keys = array_keys($array);
    natsort($keys);
    $new_sort = array();
    foreach ($keys as $keys_2) {
        $new_sort[$keys_2] = $array[$keys_2];
    }
    $array = $new_sort;
    return true;
}

简单点的。提取数组键并对其进行排序,按以下顺序对原始数组键进行排序:

array_multisort(array_keys($array), SORT_NATURAL, $array);
不区分大小写:

array_multisort(array_keys($array), SORT_NATURAL | SORT_FLAG_CASE, $array);

基于@AbraCadaver前面的答案,我成功地使用按位排序或将自然排序与大小写不敏感相结合的方法来组合一行解决方案

array_multisort(array_keys($this->streams), SORT_NATURAL | SORT_FLAG_CASE , $this->streams);
其中,
$this->streams
是我的多维数组。这似乎效果最好。

请查看 这是一个使用它的自然按键排序功能:

function knatsort(&$arr){return uksort($arr,function($a, $b){return strnatcmp($a,$b);});}
使用uksort的速度和返回值就地工作。 像这样使用它:

knatsort($array);

:)

$arr = array(
    "CFoo" => "xx1",
    "AFoo" => "xx2",
    "1Foo" => "xx3",
    "10AFoo" => "xx4"
);

ksort($arr, SORT_NATURAL);
收益率:

Array
(
    [1Foo] => xx3
    [10AFoo] => xx4
    [AFoo] => xx2
    [CFoo] => xx1
)
如果要将其递归应用于多维数组,可以为此编写一个简单函数:

function natksort_multi(&$arr = array()) {
    ksort($arr, SORT_NATURAL);

    foreach (array_keys($arr) as $key) {
        if (is_array($arr[$key])) {
            natksort_multi($arr[$key]);
        }
    }
}

定义“似乎不起作用”。顺便说一句,效果很好。@raina77现在我想我发现了一个相当简单的错误,那就是我把
natsort
错当成了
natcasesort
,所以我想我可以把它换掉。除此之外,我不知道为什么回答
array\u multisort(array\u key($array),SORT\u NATURAL,$array)的人删除它,这是一个很好的答案@AbraCadaver您只需要一个位or,用于不区分大小写。我实际测试了它,效果确实很好。)很好的解决方案。谢谢,是的,这很漂亮。