Maison > développement back-end > tutoriel php > Comment puis-je trier efficacement des tableaux multidimensionnels en PHP ?

Comment puis-je trier efficacement des tableaux multidimensionnels en PHP ?

Mary-Kate Olsen
Libérer: 2024-12-22 02:30:17
original
750 Les gens l'ont consulté

How Can I Efficiently Sort Multidimensional Arrays in PHP?

Tri des tableaux multidimensionnels en PHP : une solution polyvalente

Ce guide complet aborde la tâche de tri des tableaux multidimensionnels en PHP. Il offre une solution réutilisable et hautement personnalisable qui vous permet de trier vos données sans effort.

La solution : fonction make_comparer()

function make_comparer() {
    // Normalize criteria up front
    $criteria = func_get_args();
    foreach ($criteria as $index => $criterion) {
        $criteria[$index] = is_array($criterion)
            ? array_pad($criterion, 3, null)
            : array($criterion, SORT_ASC, null);
    }

    return function($first, $second) use (&$criteria) {
        foreach ($criteria as $criterion) {
            // Determine sort criteria
            list($column, $sortOrder, $projection) = $criterion;
            $sortOrder = $sortOrder === SORT_DESC ? -1 : 1;

            // Project values if necessary
            if ($projection) {
                $lhs = call_user_func($projection, $first[$column]);
                $rhs = call_user_func($projection, $second[$column]);
            } else {
                $lhs = $first[$column];
                $rhs = $second[$column];
            }

            // Compare values; do not return if equal
            if ($lhs < $rhs) {
                return -1 * $sortOrder;
            } elseif ($lhs > $rhs) {
                return 1 * $sortOrder;
            }
        }

        return 0; // tiebreakers exhausted, so $first == $second
    };
}
Copier après la connexion

Comment l'utiliser

Utilisation de base : Tri par une seule colonne

// Sort $data by the "name" column using uasort
$data = array(
    array('zz', 'name' => 'Jack', 'number' => 22, 'birthday' => '12/03/1980'),
    array('xx', 'name' => 'Adam', 'number' => 16, 'birthday' => '01/12/1979'),
    array('aa', 'name' => 'Paul', 'number' => 16, 'birthday' => '03/11/1987'),
    array('cc', 'name' => 'Helen', 'number' => 44, 'birthday' => '24/06/1967'),
);
uasort($data, make_comparer('name'));
Copier après la connexion

Tri par plusieurs Colonnes :

// Sort $data by "number" and then by the zero-indexed column (ID)
uasort($data, make_comparer('number', 0));
Copier après la connexion

Fonctionnalités avancées

Tri inversé :

// Sort $data by "name" descending
uasort($data, make_comparer(['name', SORT_DESC]));
Copier après la connexion

Projections personnalisées :

// Sort $data by "birthday" using date_create as a projection
uasort($data, make_comparer(['birthday', SORT_ASC, 'date_create']));
Copier après la connexion

Fonctionnalités de combinaison :

// Sort $data by "number" descending and then by "birthday" ascending
uasort($data, make_comparer(
    ['number', SORT_DESC],
    ['birthday', SORT_ASC, 'date_create']
));
Copier après la connexion

Conclusion

Cette solution offre un large éventail de fonctionnalités pour trier les tableaux multidimensionnels en PHP. Sa flexibilité et sa facilité d'utilisation en font un outil puissant pour la manipulation de données dans divers scénarios.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal