Maison >développement back-end >tutoriel php >Comment trier un tableau PHP par la valeur « optionNumber » d'un sous-tableau ?

Comment trier un tableau PHP par la valeur « optionNumber » d'un sous-tableau ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-08 02:32:09847parcourir

How to Sort a PHP Array by a Subarray's

PHP Trier les tableaux par valeur de sous-tableau : un guide complet

En PHP, les tableaux sont une structure de données indispensable pour organiser et manipuler les données. Parfois, il devient nécessaire de trier ces tableaux en fonction des valeurs contenues dans leurs sous-tableaux. Cet article explore les méthodes les plus efficaces pour trier les tableaux par valeurs de sous-tableau, en se concentrant spécifiquement sur le champ optionNumber.

Pour commencer, considérons l'exemple suivant :

$array = [
    [
        "configuration_id" => 10,
        "id" => 1,
        "optionNumber" => 3,
        "optionActive" => 1,
        "lastUpdated" => "2010-03-17 15:44:12"
    ],

    [
        "configuration_id" => 9,
        "id" => 1,
        "optionNumber" => 2,
        "optionActive" => 1,
        "lastUpdated" => "2010-03-17 15:44:12"
    ],

    [
        "configuration_id" => 8,
        "id" => 1,
        "optionNumber" => 1,
        "optionActive" => 1,
        "lastUpdated" => "2010-03-17 15:44:12"
    ]
];

L'objectif est d'organiser le $array dans un ordre incrémentiel basé sur l'optionNumber, ce qui donne le tableau trié suivant :

$sortedArray = [
    [
        "configuration_id" => 8,
        "id" => 1,
        "optionNumber" => 1,
        "optionActive" => 1,
        "lastUpdated" => "2010-03-17 15:44:12"
    ],

    [
        "configuration_id" => 9,
        "id" => 1,
        "optionNumber" => 2,
        "optionActive" => 1,
        "lastUpdated" => "2010-03-17 15:44:12"
    ],

    [
        "configuration_id" => 10,
        "id" => 1,
        "optionNumber" => 3,
        "optionActive" => 1,
        "lastUpdated" => "2010-03-17 15:44:12"
    ]
];

Pour réaliser ce tri, le PHP La fonction usort s’avère être un outil efficace. Voici comment cela peut être implémenté :

function cmp_by_optionNumber($a, $b) {
  return $a["optionNumber"] - $b["optionNumber"];
}

usort($array, "cmp_by_optionNumber");

Dans cette méthode, cmp_by_optionNumber est une fonction de comparaison définie par l'utilisateur qui compare les valeurs optionNumber des deux tableaux d'entrée. La fonction renvoie une valeur négative si l'optionNumber du premier tableau est inférieur au second, un zéro s'ils sont égaux et une valeur positive si l'optionNumber du premier tableau est supérieur au second. En utilisant cette fonction de comparaison, usort trie efficacement le $array par ordre croissant du champ optionNumber.

Pour les versions PHP 5.3 et supérieures, il est recommandé d'utiliser des fonctions anonymes pour une approche plus propre :

usort($array, function ($a, $b) {
    return $a['optionNumber'] - $b['optionNumber'];
});

Cependant, il est important de noter que si les valeurs optionNumber sont des chaînes, la soustraction dans les fonctions de comparaison peut conduire à des résultats incorrects. Dans de tels cas, envisagez d'utiliser l'approche suivante :

usort($array, function ($a, $b) {
    return strcmp($a['optionNumber'], $b['optionNumber']);
});

Enfin, dans les versions PHP 7.0 et ultérieures, l'opérateur du vaisseau spatial <=> peut être exploité à la place de la soustraction pour éviter les problèmes de débordement/troncation, en particulier lorsqu'il s'agit de grands nombres :

usort($array, function ($a, $b) {
    return $a['optionNumber'] <=> $b['optionNumber'];
});

En implémentant l'une des méthodes décrites, vous pouvez trier efficacement les tableaux PHP en fonction des valeurs des sous-tableaux, en garantissant que vos données sont organisées de manière significative et pratique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn