我有一个数组,例如
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
)
)
它需要首先按"顺序"进行排序,如果顺序不可用,则按字母顺序用"名称"进行排序(但这些数组位于所有具有排序顺序的数组之后),如果没有"顺序"answers"名称",则位于数组的末尾。
所以上面的数组需要变成:
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_multisort吗?
foreach ($data as $key => $row) {
$name[$key] = $row['name'];
$order[$key] = $row['order'];
}
array_multisort($name, SORT_DESC, $order, SORT_ASC, $data);
PHP阵列多端口
array_multisort()
可能无法提供足够的控制来实现所需的排序。
作为替代方案,您可以使用uasort()
并提供自定义比较功能。
例如:
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');