Ich habe folgende Array:Benutzerdefinierte Sortierung Array von Objekten in 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
]
];
Und ich will es sortieren, so dass es wie folgt aussieht:
$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
]
];
ich von product_id
Also im Grunde bestellen müssen und user_id
in der Weise, dass es die niedrigere Nummer product_id
von jedem Benutzer auswählt, bevor mit dem nächsten fortgefahren wird.
Ich habe versucht, usort
zu verwenden, aber ich konnte es nicht zum Funktionieren bringen.
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;
}
});
Ich habe auch versucht array_multisort
aber alles, was ich es zu tun bekommen könnte mit der gleichen Reihenfolge zu anordnen, dass ich bereits aus der Datenbank abrufen.
Code mit 'usort' ist falsch; Sie sollten mit '<'/'>' durch das erste Feld vergleichen, und nur wenn die ersten Felder gleich sind, vergleichen Sie sie mit der Sekunde. –
Sie sagen, dass Sie aus der Datenbank abrufen, einen Grund, warum Sie nicht direkt in der Abfrage sortieren? – Salketer