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

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