按数字键和字符串键对数组进行排序


Sort array by both numeric and string keys

我尝试过ksort和asort,但在这两种情况下,它们总是显示在底部。。

但我想在顶部显示索引"all"的数组,然后应该显示数字字段。

事实上,我是手动添加那把钥匙的。

    $result['all'] = new stdClass();
    $result['all']->DisciplinaryAction = 'All';
    $result['all']->DisciplinaryActionID = 0;

我尝试了ksort($result)asort($result),但在这两种情况下,text/string总是排列在底部。。

Array
(
    [0] => stdClass Object
        (
            [DisciplinaryAction] => counseling
            [DisciplinaryActionID] => 1
        )
    [1] => stdClass Object
        (
            [DisciplinaryAction] => verbal warning
            [DisciplinaryActionID] => 2
        )
    [2] => stdClass Object
        (
            [DisciplinaryAction] => written warning
            [DisciplinaryActionID] => 3
        )
    [3] => stdClass Object
        (
            [DisciplinaryAction] => suspension
            [DisciplinaryActionID] => 4
        )
    [4] => stdClass Object
        (
            [DisciplinaryAction] => termination
            [DisciplinaryActionID] => 5
        )
    [all] => stdClass Object
        (
            [DisciplinaryAction] => All
            [DisciplinaryActionID] => 0
        )
)

请参阅如何在PHP中对数组和数据进行排序?。

与排序相比,更明智的方法可能只是直接将关键字添加到数组的开头:

$arr = array_merge(array('all' => new stdClass), $arr);

您可以使用uasort、uksort或usort来定义应该如何处理。

http://php.net/manual/en/array.sorting.php

编辑:这是uksort 的比较函数

function cmp($a, $b)
{
    if ($a == $b)
        return 0;
    else if (is_string($a))
        return -1;
    else if (is_string($b))
        return 1;
    else
        return ($a < $b) ? -1 : 1;
}