I am stuck on a PHP concept that seems simple to me at first :
I have this array :
$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
)
);
I want to sort this multidimensional array by checking if quantity
is positive or negative, then by nbr_sales
(DESC), so a result like this :
$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
)
);
I tried several approaches but nothing really conclusive :
$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)
}
}
}
Thanks for your help :)