0

这是我的代码:

$array = [
    'd 01 x'=>'b',
    'd 3 x'=>'a',
    'd 02 x'=>'b',
    'd 9 x'=>'b',
    'd 8 x'=>'b',
    'd 07 x'=>'b',
    'd 10 x'=>'b'
];

ksort($array);
print_r($array);

这是结果:

Array ( [d 01 x] => b [d 02 x] => b [d 07 x] => b [d 10 x] => b [d 3 x] => a [d 8 x] => b [d 9 x] => b )

为什么之后d 02 x不显示d 3 x

我该如何解决?

谢谢

4

1 回答 1

2

您很可能希望为此使用uksort。uksort 允许您提供自己的函数,它将用于排序。

下面的代码首先定义了一个函数来将字符串键转换为它的整数表示,并使用 space ship 运算符比较两个提供的项目。

function toInt($element)
{
    return (int)str_replace(['d', ' ', 'x'], '', $element);
}

uksort($array, function ($first, $second) {
    $f = toInt($first);
    $s = toInt($second);

    return $f <=> $s;
});

print_r($array);

输出:

Array
(
    [d 01 x] => b
    [d 02 x] => b
    [d 3 x] => a
    [d 07 x] => b
    [d 8 x] => b
    [d 9 x] => b
    [d 10 x] => b
)
于 2021-01-10T21:43:19.853 回答