我有这个数组:
$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()
更改密钥:15210
到0
为什么会发生这种变化?
答案 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']);
});