Maison > développement back-end > tutoriel php > Comment trier des tableaux multidimensionnels en PHP à l'aide d'une fonction flexible et réutilisable ?

Comment trier des tableaux multidimensionnels en PHP à l'aide d'une fonction flexible et réutilisable ?

Patricia Arquette
Libérer: 2025-01-01 07:29:09
original
496 Les gens l'ont consulté

How to Sort Multidimensional Arrays in PHP Using a Flexible and Reusable Function?

Comment trier un tableau multidimensionnel en PHP

Présentation d'une solution généralisée pour PHP 5.3

Mise en œuvre :

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) {
            list($column, $sortOrder, $projection) = $criterion;
            $sortOrder = $sortOrder === SORT_DESC ? -1 : 1;

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

            if ($lhs < $rhs) {
                return -1 * $sortOrder;
            } elseif ($lhs > $rhs) {
                return 1 * $sortOrder;
            }
        }

        return 0; // tiebreakers exhausted
    };
}
Copier après la connexion

Fonctionnalités avancées :

(1) Colonnes de tri multiples :

usort($data, make_comparer('number', 'name'));
Copier après la connexion

(2) Inverser Trier :

usort($data, make_comparer(['name', SORT_DESC]));
Copier après la connexion

(3) Projections personnalisées :

usort($data, make_comparer(['birthday', SORT_ASC, 'date_create']));
Copier après la connexion

(4) Combinaison Caractéristiques :

usort($data, make_comparer(
    ['number', SORT_DESC],
    ['birthday', SORT_ASC, 'date_create']
));
Copier après la connexion

Avantages :

  • Réutilisable
  • Fl exible
  • Réversible
  • Extensible
  • Associatif

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 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