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

时间:2015-04-03 15:40:47

标签: php arrays function array-multisort

我有这个数组:

$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为什么会发生这种变化?

2 个答案:

答案 0 :(得分:4)

来自manual

的引用
  

将维护关联(字符串)键,但数字键将被重新编入索引。

PHP会自动转换你的字符串" 15210"到整数。

工作的诀窍是添加" 0"对于键(" 015210"),它将强制类型转换为(字符串)。

如果想了解更多相关信息,请参阅:Bug #21788 array_multisort() changes array keys unexpectedly given numeric strings as keys

答案 1 :(得分:0)

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

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

});