使用 PHP 的 usort 方法对数组进行排序
Sorting an array using PHP's usort method
可能我想要的是'too'自定义,必须手动完成,我以为usort
可以做到,但似乎我完全不明白。按日期降序排列一组节目,但如果日期是当前年份,则将它们放在数组的开头:
usort($show, function($a, $b){
$year = (int) date("Y", time());
$a = $a['date'];
$b = $b['date'];
if ($a === $year) return -1;
if ($b === $year) return -1;
if ($a === $b) return 0;
return ($a > $b) ? -1 : 1;
});
如果 $a
是当前年份而 $b
不是当前年份,则将 $a
放在第一位。
如果 $a
不是当前年份而 $b
是当前年份,则将 $b
放在第一位。
否则只需为 $a
和 $b
:
做简单的 comparison/sorting
$array = array(
1890,
1725,
2000,
2004,
2015,
2016,
2050,
2156,
2019,
);
usort($array, function ($a, $b) {
$y= date('Y');
if ($a == $y && $b != $y) {
return -1;
} elseif ($a != $y && $b == $y) {
return 1;
}
return $b - $a;
});
var_dump($array);
// output
Array
(
[0] => 2015
[1] => 2156
[2] => 2050
[3] => 2019
[4] => 2016
[5] => 2004
[6] => 2000
[7] => 1890
[8] => 1725
)
可能我想要的是'too'自定义,必须手动完成,我以为usort
可以做到,但似乎我完全不明白。按日期降序排列一组节目,但如果日期是当前年份,则将它们放在数组的开头:
usort($show, function($a, $b){
$year = (int) date("Y", time());
$a = $a['date'];
$b = $b['date'];
if ($a === $year) return -1;
if ($b === $year) return -1;
if ($a === $b) return 0;
return ($a > $b) ? -1 : 1;
});
如果 $a
是当前年份而 $b
不是当前年份,则将 $a
放在第一位。
如果 $a
不是当前年份而 $b
是当前年份,则将 $b
放在第一位。
否则只需为 $a
和 $b
:
$array = array(
1890,
1725,
2000,
2004,
2015,
2016,
2050,
2156,
2019,
);
usort($array, function ($a, $b) {
$y= date('Y');
if ($a == $y && $b != $y) {
return -1;
} elseif ($a != $y && $b == $y) {
return 1;
}
return $b - $a;
});
var_dump($array);
// output
Array
(
[0] => 2015
[1] => 2156
[2] => 2050
[3] => 2019
[4] => 2016
[5] => 2004
[6] => 2000
[7] => 1890
[8] => 1725
)