php按字母数字值排序多维数组

use*_*430 1 php

我正在寻找一个自定义函数,它将遵循数组的顺序并通过'name'索引对其进行排序.'strcasecmp()'函数不理解人类会阅读它的字母数字值.它认为'苹果12'的价值低于'苹果5'.我试过这个方法但是找不到比较字母数字值的函数:

$array = array(
    0 => array(
        'id' => 2,
        'type' => 'Apples',
        'name' => 'Apples 5',
    ),
    1 => array(
        'id' => 3,
        'type' => 'Grapes',
        'name' => 'Apples',
    ),
    2 => array(
        'id' => 4,
        'type' => 'Apples',
        'name' => 'Apples 4',
    ),
    3 => array(
        'id' => 5,
        'type' => 'Grapes',
        'name' => 'Apples 01',
    ),
    4 => array(
        'id' => 6,
        'type' => 'Apples',
        'name' => 'Apples 1',
    ),
    5 => array(
        'id' => 7,
        'type' => 'Grapes',
        'name' => 'Apples 12',
    )
);

uasort($array, function($a, $b) {
    return strcasecmp($a['name'], $b['name']);
});

foreach($array as $single) {
    echo $single['name'].'<br />';
}
Run Code Online (Sandbox Code Playgroud)

上面代码的意外结果:

Apples
Apples 01
Apples 1
Apples 12
Apples 4
Apples 5
Run Code Online (Sandbox Code Playgroud)

我想要实现的结果:

Apples
Apples 01
Apples 1
Apples 4
Apples 5
Apples 12
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

goa*_*oat 6

使用strnatcasecmp()进行自然排序