Rog*_*gue 5 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/example"
}
["anotheruser"]=>
array(1) {
["link"]=>
string(24) "http://twitch.tv/example"
}
// etc...
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试了一些事情,但我没有运气.使用uksortnatsort不起作用,如果我不需要,我不想为自然排序顺序编写客户比较器.我也尝试单独对键进行排序,但这似乎不起作用
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;
}
Run Code Online (Sandbox Code Playgroud)
Abr*_*ver 14
更简单的东西.提取数组键并对其进行排序,按原样排序原始数据:
array_multisort(array_keys($array), SORT_NATURAL, $array);
Run Code Online (Sandbox Code Playgroud)
不区分大小写:
array_multisort(array_keys($array), SORT_NATURAL| SORT_FLAG_CASE, $array);
Run Code Online (Sandbox Code Playgroud)
甚至比使用更简单array_multisort:您实际上可以向内置ksort函数提供一个排序标志,使其按自然顺序按键对数组进行排序:
$arr = array(
"CFoo" => "xx1",
"AFoo" => "xx2",
"1Foo" => "xx3",
"10AFoo" => "xx4"
);
ksort($arr, SORT_NATURAL);
Run Code Online (Sandbox Code Playgroud)
产量:
Array
(
[1Foo] => xx3
[10AFoo] => xx4
[AFoo] => xx2
[CFoo] => xx1
)
Run Code Online (Sandbox Code Playgroud)
如果您想将其递归地应用于多维数组,您可以为此编写一个简单的函数:
function natksort_multi(&$arr = array()) {
ksort($arr, SORT_NATURAL);
foreach (array_keys($arr) as $key) {
if (is_array($arr[$key])) {
natksort_multi($arr[$key]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
查看strnatcmp(); 这是使用它的键功能的自然排序:
function knatsort(&$arr){return uksort($arr,function($a, $b){return strnatcmp($a,$b);});}
Run Code Online (Sandbox Code Playgroud)
使用 uksort 的速度和返回值就地工作。像这样使用它:
knatsort($array);
Run Code Online (Sandbox Code Playgroud)
:)
| 归档时间: |
|
| 查看次数: |
6371 次 |
| 最近记录: |