Mam następującą tablicę:Niestandardowe sortowanie tablicę obiektów w PHP
$arr = [
[
'user_id' => 1,
'product_id' => 1
],
[
'user_id' => 1,
'product_id' => 2
],
[
'user_id' => 1,
'product_id' => 3
],
[
'user_id' => 2,
'product_id' => 1
],
[
'user_id' => 2,
'product_id' => 2
],
[
'user_id' => 3,
'product_id' => 1
]
];
I chcę je posortować więc wygląda to tak:
$arr = [
[
'user_id' => 1,
'product_id' => 1
],
[
'user_id' => 2,
'product_id' => 1
],
[
'user_id' => 3,
'product_id' => 1
],
[
'user_id' => 1,
'product_id' => 2
],
[
'user_id' => 2,
'product_id' => 2
],
[
'user_id' => 1,
'product_id' => 3
]
];
Więc w zasadzie muszę zamówić przez product_id
i user_id
w taki sposób, aby wybrać niższy numer product_id
od każdego użytkownika przed przejściem do następnego.
Próbowałem użyć usort
, ale nie mogłem go uruchomić.
usort($campaigns, function($a, $b){
if($a['product_id'] == $b['product_id']){
return 0;
}
if($a['product_id'] < $b['product_id']){
if($a['user_id'] == $b['user_id']){
return 1;
}
if($a['user_id'] < $a['user_id']){
return 0;
}
return -1;
}else{
if($a['user_id'] == $a['user_id']){
return -1;
}
if($a['user_id'] < $a['user_id']){
return 0;
}
return 1;
}
});
Próbowałem też array_multisort
ale wszystko, co mogłem zrobić to zrobić, to zamówić używając tej samej kolejności, że już pobrać z bazy danych.
kod z 'usort' jest błędne; powinieneś porównać do "<'/'>" przez pierwsze pole i tylko wtedy, gdy pierwsze pola są równe, porównaj przez sekundę. –
Mówisz, że pobierasz dane z bazy danych, z dowolnego powodu, dlaczego nie sortujesz bezpośrednio w zapytaniu? – Salketer