我尝试做的是按数字对多维数组进行排序,但任何值等于0,都在数组的末尾。
此代码适用于使用0和1位数进行排序,但在添加不同数字时似乎会中断。
输出需要是: 41,42,43,44,45,46,0,0,0
<?php
$array = array(
array(
"position" => 41,
),
array(
"position" => 43,
),
array(
"position" => 42,
),
array(
"position" => 44,
),
array(
"position" => 45,
),
array(
"position" => 0,
),
array(
"position" => 0,
),
array(
"position" => 0,
),
array(
"position" => 46,
),
);
// Sort ascending
usort($array, 'sortByPosition');
// Show result
echo '<pre>';
print_r($array);
function sortByPosition($a, $b) {
return $a['position'] != 0 ? $a['position'] - $b['position'] : $b['position'] - $a['position'];
}
答案 0 :(得分:2)
你的比较功能有点偏。我会这样做:
function sortByPosition($a, $b) {
if ($a['position'] == $b['position']) return 0;
if ($a['position'] == 0) return 1;
if ($b['position'] == 0) return -1;
return $a['position'] > $b['position'] ? 1 : -1;
}
首先,如果两个位置相同,则返回0,无论如何 是否为零。
第二个和第三个,如果其中任何一个 为零,那么应该排序 在另一个之后(因为如果他们已经回来已经回来了 零)。
第四,两者都不为零,所以只需正常比较这些值。
答案 1 :(得分:1)
这样:
usort($array, function ($a, $b) {
if (!$a['position']) return 1;
if (!$b['position']) return -1;
return $a['position']-$b['position'];
});