基于php中的键的数组重新排序

时间:2017-07-26 16:14:24

标签: php arrays

我想重新排列以下数组,其中字母键应首先出现,然后是数字键。 实际上数组如下。

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] => 
)

提前致谢。

3 个答案:

答案 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中的内容!

&#13;
&#13;
<?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;
&#13;
&#13;