我有一个数组,它是多个数据库表合并成所需信息的数组。我想按姓名的字母顺序对这些信息排序,如果是同名的,则按id排序。
我查看了以下所有主题,但无法产生工作结果。
- 在PHP中排序多维数组
- 对多维数组进行排序
- 在PHP中排序多维数组
- http://php.net/manual/en/function.usort.php
MY ARRAY as sudo dump
array(3){
[0] => array(3){
['id'] => "1",
['name'] => "Slippery Sasha",
['type'] => "Electric Eel"
},
[1] => array(3){
['id'] => "2",
['name'] => "Viscious Vipers",
['type'] => "Snake"
},
[2] => array(3){
['id'] => "3",
['name'] => "Finnic Fox",
['type'] => "Rabid Fox"
},
}
代码尝试
// Sort
$sortByTypes = array('name', 'id', 'type');
usort($returnArray, function($a, $b) use($sortByTypes){
foreach($sortByTypes as $field){
$sort = strnatcasecmp($a[$field], $a[$field]);
if($sort !== 0){
break;
}
}
return $sort;
});
MY INTENDED DUMP
array(3){
[0] => array(3){
['id'] => "3",
['name'] => "Finnic Fox",
['type'] => "Rabid Fox"
},
[1] => array(3){
['id'] => "1",
['name'] => "Slippery Sasha",
['type'] => "Electric Eel"
},
[2] => array(3){
['id'] => "2",
['name'] => "Viscious Vipers",
['type'] => "Snake"
},
}
如果你能解释一下它是如何工作的,以及它是如何对数组进行排序的,让我更好地理解这个功能,那就太棒了!
您可以使用usort
作为
usort($arr,function($a,$b){
$c = strcasecmp($a['name'], $b['name']);
$c .= $a['id'] - $b['id'];
return $c;
});
print_r($arr);