Ho il seguente array:l'ordinamento personalizzato array di oggetti 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
]
];
E voglio risolvere la cosa in modo che assomiglia a questo:
$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
]
];
Quindi, in pratica ho bisogno di ordinare da product_id
e user_id
in modo tale da selezionare il numero più basso product_id
da ciascun utente prima di passare al successivo.
Ho provato a utilizzare usort
ma non ho potuto farlo funzionare.
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;
}
});
Ho anche provato array_multisort
ma tutto quello che potevo arrivare a fare è quello di ordinare usando lo stesso ordine che ho già recuperare dal database.
il codice con 'usort' è corretto; dovresti confrontare con '<'/'>' dal primo campo, e solo se i primi campi sono uguali a confronto per secondo. –
Stai dicendo che stai recuperando dal database, qualsiasi motivo per cui non stai ordinando direttamente sulla query? – Salketer