我需要根据商品的销售量对数组进行排序。然后我需要对它进行排序,以便优先级(任何高于零的值)移到顶部。 我遇到的问题是当我进行第二次排序(第3步)时,它会从第2步中取消排序。
第1步:我有一个数组:
array(
array(
'title' => 'A',
'priority' => 0,
'sold_count' => 44
),
array(
'title' => 'B',
'priority' => 2,
'sold_count' => 0
),
array(
'title' => 'C',
'priority' => 1,
'sold_count' => 3
),
array(
'title' => 'D',
'priority' => 0,
'sold_count' => 33
),
)
第2步:我根据sold_count对其进行排序并获取:
array(
array(
'title' => 'A',
'priority' => 0,
'sold_count' => 44
),
array(
'title' => 'D',
'priority' => 0,
'sold_count' => 33
),
array(
'title' => 'C',
'priority' => 1,
'sold_count' => 3
),
array(
'title' => 'B',
'priority' => 2,
'sold_count' => 0
),
)
第3步:按优先级排序(我应该得到的)。
array(
array(
'title' => 'B',
'priority' => 2,
'sold_count' => 0
),
array(
'title' => 'C',
'priority' => 1,
'sold_count' => 3
),
array(
'title' => 'A',
'priority' => 0,
'sold_count' => 44
),
array(
'title' => 'D',
'priority' => 0,
'sold_count' => 33
),
)
而不是得到我想要的东西(第3步),我得到一个优先顺序排列的数组,但是后面的所有其他指南都有一个随机顺序。不应该使用所有没有优先级的指南(优先级=== 0)。
我尝试过使用asort,aasort,自定义foreach以及设置密钥和此多重排序的一系列方法(以下示例,但取自here和here, the example 3)。
$sorterA =
$sorterB = array();
foreach($array as $k => $v) {
$sorterA[$k] = $k;
$sorterB[$k] = $v['priority'];
}
array_multisort($sorterA, SORT_NUMERIC, $sorterB, SORT_DESC, SORT_NUMERIC, $array);
注意:两种排序都需要单独完成(因为第一种排序并不总是按sold_count排序,而是按日期或其他方式排序)。
答案 0 :(得分:2)
您只需按2列排序:
usort($arr, function($a, $b) {
if ($a['priority'] == $b['priority']) {
return $a['sold_count'] < $b['sold_count'] ? 1 : -1;
}
return $a['priority'] < $b['priority'] ? 1 : -1;
});
所以如果优先级不同,它会按priority
排序,否则按sold_count