【发布时间】:2021-05-11 13:06:25
【问题描述】:
我陷入了一个起初对我来说似乎很简单的 PHP 概念:
我有这个数组:
$test = array(
array(
'quantity' => 0,
'nbr_sales' => 10
),
array(
'quantity' => 10,
'nbr_sales' => 100
),
array(
'quantity' => 10,
'nbr_sales' => 1250
),
array(
'quantity' => 20,
'nbr_sales' => 5000
),
array(
'quantity' => -1,
'nbr_sales' => 990
),
array(
'quantity' => 0,
'nbr_sales' => 1000
)
);
我想通过检查quantity 是正数还是负数,然后通过nbr_sales (DESC) 对这个多维数组进行排序,所以结果如下:
$result = array(
array(
'quantity' => 20,
'nbr_sales' => 5000
),
array(
'quantity' => 10,
'nbr_sales' => 1250
),
array(
'quantity' => 10,
'nbr_sales' => 100
),
array(
'quantity' => 0,
'nbr_sales' => 1000
),
array(
'quantity' => 0,
'nbr_sales' => 10
),
array(
'quantity' => -1,
'nbr_sales' => 990
)
);
我尝试了几种方法,但都没有真正的结论:
$result = array();
$positives = array(); $negatives = array();
foreach($test as $t) {
$t['quantity'] > 0 ? array_push($positives, $t) : array_push($negatives, $t);
}
usort($positives, function($a, $b){
return $a['nbr_sales'] == $b['nbr_sales'] ? 0 : ($a['nbr_sales'] < $b['nbr_sales'] ? 1 : -1);
});
usort($negatives, function($a, $b){
return $a['nbr_sales'] == $b['nbr_sales'] ? 0 : ($a['nbr_sales'] < $b['nbr_sales'] ? 1 : -1);
});
array_push($result, $positives);
array_push($result, $negatives);
var_dump($result)
array(2) {
[0] => array(3) {
[0] => array(2) {
["quantity"] => int(20)
["nbr_sales"]=> int(5000)
}
[1]=> array(2) {
["quantity"] => int(10)
["nbr_sales"]=> int(1250)
}
[2] => array(2) {
["quantity"] => int(10)
["nbr_sales"]=> int(100)
}
}
[1]=> array(3) {
[0] => array(2) {
["quantity"] => int(0)
["nbr_sales"]=> int(1000)
}
[1]=> array(2) {
["quantity"]=> int(-1)
["nbr_sales"] => int(990)
}
/* should be above */
[2]=> array(2) {
["quantity"] => int(0)
["nbr_sales"] => int(10)
}
}
}
感谢您的帮助:)
【问题讨论】:
-
请分享您的努力并解释它在哪里以及如何准确地未能满足您的需求。在不显示您尝试过的情况下发布问题是一种快速通道,可以通过 this one 等规范目标结束您的问题。