Je dois trier ci-dessous le tableau donné par priorité. Si la valeur de priorité est 0, ne pas inclure dans le tableau de tri. J'ai essayé de nombreuses façons, mais je n'ai pas obtenu la sortie comme prévu.
Array
(
[recently_viewed] => Array
(
[priority] => 1
[no_of_products] => 1
)
[recently_visited_cat] => Array
(
[priority] => 1
[no_of_products] => 1
)
[last_ordered_items] => Array
(
[priority] => 3
[no_of_products] => 3
)
[searched_based] => Array
(
[priority] => 0
[no_of_products] => 4
)
[cart_based] => Array
(
[priority] => 1
[no_of_products] => 5
)
[wishlist_based] => Array
(
[priority] => 1
[no_of_products] => 6
)
[sku_based] => Array
(
[priority] => 0
[no_of_products] => 7
)
)
S'il vous plaît, aidez-moi.
3 Réponses :
Vous pouvez utiliser array_filter () fonction pour exclure les enregistrements avec 0 priorité. Après cela, vous pouvez trier le tableau avec l'aide uasort () code > fonction. Par exemple:
$arr = array_filter($arr, function($element) {
return $element['priority'] > 0;
});
uasort($arr, function ($a, $b) {
if ($a['priority'] === $b['priority']) {
return 0;
}
return ($a['priority'] < $b['priority']) ? -1 : 1;
});
Votre code de rappel uasort peut simplement être return $ a ['priority'] <=> $ b ['priority'] ou return $ a ['priority' ] - $ b ['priority'] (avant PHP7). Notez que cela dépend également si une priorité plus élevée a une valeur de priorité plus élevée ou plus basse (sinon changez simplement les opérandes).
@Jeto bien sûr, mais je ne sais pas quelle version de PHP utilise l'auteur, donc je n'utilise pas l'opérateur <=>
Bien - l'autre alternative (avec - ) fonctionne sur n'importe quelle version cependant.
Vous pouvez utiliser array_filter ( doc - pour vérifier plus grand que 0) puis uasort ( doc ):
$arr = [];
$arr["recently_viewed"] = ["priority" => 1, "no_of_products" =>1];
$arr["searched_based"] = ["priority" => 0, "no_of_products" =>4];
$arr["last_ordered_items"] = ["priority" => 3, "no_of_products" =>3];
$arr = array_filter($arr, function ($e) {return $e["priority"];});
uasort($arr, function($a, $b) {
return $a['priority'] - $b['priority'];
});
Exemple en direct: 3v4l a>
Si la priorité est 1, elle doit être en premier dans le tableau.
@Magecode - Je fais l'ordre de descente - met à jour l'ordre des $ a et $ b - maintenant c'est asc
Vous pouvez utiliser array_filter avec la fonction callback pour supprimer les valeurs avec ZERO
usort($arr, function($a, $b) {
return $a['priority'] <=> $b['priority'];
});
Cela va supprimez tout le sous-tableau qui a des valeurs de priorité ZERO.
Vous pouvez maintenant appliquer usort pour trier le tableau
$arr = array_filter($arr, function ($e) {return $e["priority"];});
Voir le code de travail Live
Remarquez d'abord les clés du tableau - OP voudra probablement les conserver - utilisez donc uasort et non usort . Deuxièmement - qu'est-ce qui est différent ici, puis une autre réponse?
Double possible de Comment trier un tableau multidimensionnel par valeur? A >
Je l'ai également essayé mais ne fonctionne pas. ainsi posté une nouvelle question.
Alors n'hésitez pas à partager vos tentatives afin que nous puissions vous aider.
Je suppose que vous devriez utiliser
array_filterpour la priorité 0 avant de trier