我想重新排列以下数组,其中字母键应首先出现,然后是数字键。 实际上数组如下。
Array
(
[1] => completed
[2] => completed
[3] => completed
[4] => completed
[5] =>
[user_name] => ABCD
)
,输出应为
Array
(
[user_name] => ABCD
[1] => completed
[2] => completed
[3] => completed
[4] => completed
[5] =>
)
提前致谢。
答案 0 :(得分:2)
您需要一个自定义类别:
uksort($a, function($a, $b){
if ( (is_numeric($a) && ! is_numeric($b)) ) {
return 1;
}
if (!is_numeric($a) && is_numeric($b)) {
return -1;
}
return $a > $b ? 1 : ($a == $b ? 0 : -1);
});
答案 1 :(得分:0)
您需要的功能是uksort()
。它按键对数组进行排序,维护键值关联,并允许您编写排序规则。
可能是这样的:
$data = [
1 => 'completed',
2 => 'Completed',
3 => 'completed',
4 => 'completed',
5 => NULL,
'user_name' => 'KABCD',
];
uksort(
$data,
function ($a, $b) {
if (is_string($a)) {
return is_string($b) ? strcmp($a, $b) : -1;
} else {
return is_string($b) ? +1 : ($a - $b);
}
}
);
回调函数总是返回"字符串<整数"当传递的键的类型不同时,它们在相同时使用适当的比较方法。
在PHP 7中,可以使用新的comparison operator:
编写函数 function ($a, $b) {
if (is_string($a)) {
return is_string($b) ? ($a <=> $b) : -1;
} else {
return is_string($b) ? +1 : ($a <=> $b);
}
}
答案 2 :(得分:-3)
这个测试好了,我想。 https://iconoun.com/demo/temp_chiru.php
手册页ref:http://php.net/manual/en/array.sorting.php
建议您在下载之前尝试使用该链接,或者在撰写用户代码的狂野追逐中发送作者,以执行已内置于PHP中的内容!
<?php // demo/temp_chiru.php
/**
* User-Sorting an array
*
* https://stackoverflow.com/questions/45332372/array-reordering-based-on-key-in-php
* http://php.net/manual/en/function.ksort.php
*/
error_reporting(E_ALL);
echo '<pre>';
$arr = Array
( '1' => 'completed'
, '2' => 'completed'
, '3' => 'completed'
, '4' => 'completed'
, '5' => NULL
, 'user_name' => 'ABCD'
)
;
ksort($arr);
var_dump($arr);
$arr = Array
( 1 => 'completed'
, 2 => 'completed'
, 3 => 'completed'
, 4 => 'completed'
, 5 => NULL
, 'user_name' => 'ABCD'
)
;
ksort($arr);
var_dump($arr);
&#13;