php中的函数arraymultisort更改了我的数组的键


function array_multisort in php change the key of my array

我有这个数组:

$array["4E-952778"][0]['fileName'] = "File 1";
$array["4E-952778"][0]['product'] = "Muse On Demand";
$array["4E-952778"][1]['fileName'] = "File 2";
$array["4E-952778"][1]['product'] = "Muse On Demand";   
$array["15210"][0]['fileName'] = "File 3";
$array["15210"][0]['product'] = "4Manager"; 
$array["15210"][1]['fileName'] = "File 4";
$array["15210"][1]['product'] = "4Manager";
$products = array();
foreach ($array as $key => $row) {
    $products[$key] = $row[0]['product'];       
}
array_multisort($products, SORT_ASC, $array);
print_r($array);

结果是:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [fileName] => File 3
                    [product] => 4Manager
                )
            [1] => Array
                (
                    [fileName] => File 4
                    [product] => 4Manager
                )
        )
    [4E-952778] => Array
        (
            [0] => Array
                (
                    [fileName] => File 1
                    [product] => Muse On Demand
                )
            [1] => Array
                (
                    [fileName] => File 2
                    [product] => Muse On Demand
                )
        )
)

正如你所观察到的,函数array_multisort()改变了键:152100为什么会改变?

手册中的一句话:

关联(字符串)键将被保留,但数字键将被重新索引

PHP会自动将字符串"15210"转换为整数。

这样做的诀窍是在键("015210")中添加一个"0",它将强制类型转换为(string)。

如果想了解更多关于这方面的信息,请参阅:Bug#21788 array_multisort()意外地将数组键更改为键

我找到了这个问题的解决方案

uasort($array, function ($a, $b) {
 $i=0;
 return strcmp($a[$i]['product'], $b[$i]['product']);

});