我需要根据商品的销售量对数组进行排序。然后我需要对其进行排序,以便将优先级(高于零的任何内容)移到顶部。我遇到的问题是,当我进行第二次排序(第 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、custom foreach 并设置键和这个 multisort 的方法(下面的例子,但取自这里和这里,例子 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 排序,而是按日期或其他事物排序)。