Ես փորձում եմ տեսակավորել իմ օբյեկտների զանգվածը՝ հիմնվելով նվազագույն SUM
ի վրա: Սա աշխատում է, բայց ես ուզում եմ իմ usort ֆունկցիային ավելացնել ևս մեկ համեմատություն, որը կնախընտրի օբյեկտը, որը կունենա մեկ true արժեք: Իմ օբյեկտները.
object(Basket)[33]
public 'products' =>
array (size=2)
0 =>
object(Product)[13]
public 'name' => string 'Name ONE' (length=8)
public 'price' => float 0.75
public 'exist' => boolean true
1 =>
object(Product)[7]
public 'name' => string 'Name TWO' (length=8)
public 'price' => float 2.39
public 'exist' => boolean true
public 'sum' => float 3.14
object(Basket)[34]
public 'products' =>
array (size=2)
0 =>
object(Product)[19]
public 'name' => string 'Name ONE' (length=8)
public 'price' => float 0.75
public 'exist' => boolean true
1 =>
object(Product)[72]
public 'name' => string 'Name TWO' (length=8)
public 'price' => null
public 'exist' => boolean false
public 'sum' => float 0.75
object(Basket)[35]
public 'products' =>
array (size=2)
0 =>
object(Product)[1]
public 'name' => string 'Name ONE' (length=8)
public 'price' => float 0.75
public 'exist' => boolean true
1 =>
object(Product)[2]
public 'name' => string 'Name TWO' (length=8)
public 'price' => float 1.75
public 'exist' => boolean true
public 'sum' => float 2.5
Եվ եթե ես sort
սա, ապա կարգը Basket[34],Basket[35],Basket[33]
է:
Բայց ես ուզում եմ Basket[35],Basket[33]
, իսկ վերջում՝ Basket[34]
, քանի որ նա ունի 1 ապրանք, որը չկա։
Այսպիսով, ես ուզում եմ պատվիրել ապրանքի առկայության հիման վրա, իսկ հետո sort
_ից SUM
: Ես ունեմ սա, բայց դա չի աշխատում.
usort($h_basket[$i], function($a, $b) {
return $a->sum > $b->sum;
});
usort($h_basket[$i], function($a, $b) {
$unfinded_a = 0;
$unfinded_b = 0;
foreach ($a->products as $product) {
if(!$product->exist) {
$unfinded_a++;
}
}
foreach ($b->products as $product) {
if(!$product->exist) {
$unfinded_b++;
}
}
if ($unfinded_a != 0 || $unfinded_b != 0)
return $unfinded_b > $unfinded_a;
});
Հնարավո՞ր է դա անել usort
-ով, թե՞ ես պետք է օգտագործեմ array_multisort
-ը: