Php 通过考虑两种不同的属性对多维数组进行排序
例如,我有一个数组Php 通过考虑两种不同的属性对多维数组进行排序,php,arrays,sorting,Php,Arrays,Sorting,例如,我有一个数组 Array ( [0] => Array ( [id] => 6 [name] => ah [order] => 4 ) [1] => Array ( [id] => 5 [name] => hz [order] =>
Array
(
[0] => Array
(
[id] => 6
[name] => ah
[order] => 4
)
[1] => Array
(
[id] => 5
[name] => hz
[order] =>
)
[2] => Array
(
[id] => 7
[name] => ch
[order] =>
)
[3] => Array
(
[id] => 5
[name] =>
[order] =>
)
[4] => Array
(
[id] => 4
[name] => zh
[order] => 1
)
)
它需要先按“顺序”排序,如果顺序不可用,则按字母顺序用“名称”排序(但这些数组排在所有具有排序顺序的数组之后),如果没有“顺序”和“名称”,则排在数组末尾
因此,上述阵列需要变成:
Array
(
[0] => Array
(
[id] => 4
[name] => zh
[order] => 1
)
[1] => Array
(
[id] => 6
[name] => ah
[order] => 4
)
[2] => Array
(
[id] => 7
[name] => ch
[order] =>
)
[3] => Array
(
[id] => 5
[name] => hz
[order] =>
)
[4] => Array
(
[id] => 5
[name] =>
[order] =>
)
)
我尝试了一些循环,但没有找到解决方案。你看过array\u multisort吗
foreach ($data as $key => $row) {
$name[$key] = $row['name'];
$order[$key] = $row['order'];
}
array_multisort($name, SORT_DESC, $order, SORT_ASC, $data);
您看过array\u multisort吗
foreach ($data as $key => $row) {
$name[$key] = $row['name'];
$order[$key] = $row['order'];
}
array_multisort($name, SORT_DESC, $order, SORT_ASC, $data);
数组_multisort()
可能无法提供足够的控制来实现所需的排序
作为替代方案,您可以使用并提供自定义比较函数
例如:
function compare($a, $b) {
if (empty($a['order']) && !empty($b['order'])) {
return 1;
}
if (!empty($a['order']) && empty($b['order'])) {
return -1;
}
if ($a['order'] == $b['order']) {
return strnatcmp($a['name'], $b['name']);
}
return ($a['order'] < $b['order']) ? -1 : 1;
}
uasort($arr, 'compare');
函数比较($a,$b){
if(空($a['order'])和&!空($b['order'])){
返回1;
}
如果(!empty($a['order'])和&empty($b['order'])){
返回-1;
}
如果($a['order']=$b['order']){
返回strnatcmp($a['name'],$b['name']);
}
退货($a['order']<$b['order'])?-1:1;
}
uasort($arr,'compare');
array\u multisort()
可能无法提供足够的控制来实现所需的排序
作为替代方案,您可以使用并提供自定义比较函数
例如:
function compare($a, $b) {
if (empty($a['order']) && !empty($b['order'])) {
return 1;
}
if (!empty($a['order']) && empty($b['order'])) {
return -1;
}
if ($a['order'] == $b['order']) {
return strnatcmp($a['name'], $b['name']);
}
return ($a['order'] < $b['order']) ? -1 : 1;
}
uasort($arr, 'compare');
函数比较($a,$b){
if(空($a['order'])和&!空($b['order'])){
返回1;
}
如果(!empty($a['order'])和&empty($b['order'])){
返回-1;
}
如果($a['order']=$b['order']){
返回strnatcmp($a['name'],$b['name']);
}
退货($a['order']<$b['order'])?-1:1;
}
uasort($arr,'compare');
正在检查阵列多端口。Ps此代码没有返回正确排序的数组。@robertparé此代码只是使用数组_multisort的一个示例。通过将循环与排序相结合,您的问题应该得到解决。数组\u multisort($order,SORT\u ASC,$name,SORT\u ASC,$data);您能否给出答案,以便生成的数组是正确的?我在循环方面有问题,也找不到数组多端口的解决方案。正在检查数组多端口。Ps此代码没有返回正确排序的数组。@robertparé此代码只是使用数组_multisort的一个示例。通过将循环与排序相结合,您的问题应该得到解决。数组\u multisort($order,SORT\u ASC,$name,SORT\u ASC,$data);您能否给出答案,以便生成的数组是正确的?我在循环方面有问题,也找不到array multisort的解决方案。非常好,谢谢。我刚刚在$a['name']和$b['name']中都添加了strtolower(),否则排序不正确,非常好,谢谢。我刚刚将strtolower()添加到$a['name']和$b['name']中,否则排序不正确