Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana Mengisih Tatasusunan Berbilang Dimensi dalam PHP Menggunakan Fungsi Fleksibel dan Boleh Digunakan Semula?

Bagaimana Mengisih Tatasusunan Berbilang Dimensi dalam PHP Menggunakan Fungsi Fleksibel dan Boleh Digunakan Semula?

Patricia Arquette
Patricia Arquetteasal
2025-01-01 07:29:09464semak imbas

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

Cara Isih Tatasusunan Berbilang Dimensi dalam PHP

Memperkenalkan Penyelesaian Umum untuk PHP 5.3

Pelaksanaan:

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

Ciri Terperinci:

(1) Lajur Isih Berbilang :

usort($data, make_comparer('number', 'name'));

(2) Isih Songsang:

usort($data, make_comparer(['name', SORT_DESC]));

(3) Unjuran Tersuai:

usort($data, make_comparer(['birthday', SORT_ASC, 'date_create']));

(4) Menggabungkan Ciri-ciri:

usort($data, make_comparer(
    ['number', SORT_DESC],
    ['birthday', SORT_ASC, 'date_create']
));

Faedah:

  • Boleh Digunakan Semula
  • Fl exible
  • Boleh Balik
  • Boleh Diperluas
  • Asosiatif

Atas ialah kandungan terperinci Bagaimana Mengisih Tatasusunan Berbilang Dimensi dalam PHP Menggunakan Fungsi Fleksibel dan Boleh Digunakan Semula?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn