Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Menyisih Tatasusunan Multidimensi dengan Cekap dalam PHP?

Bagaimanakah Saya Boleh Menyisih Tatasusunan Multidimensi dengan Cekap dalam PHP?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-22 02:30:17753semak imbas

How Can I Efficiently Sort Multidimensional Arrays in PHP?

Isih Tatasusunan Berbilang Dimensi dalam PHP: Penyelesaian Serbaguna

Panduan komprehensif ini menangani tugas menyusun tatasusunan berbilang dimensi dalam PHP. Ia menawarkan penyelesaian yang boleh digunakan semula dan sangat disesuaikan yang memperkasakan anda dengan keupayaan untuk mengisih data anda dengan mudah.

Penyelesaian: Fungsi 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
    };
}

Cara Menggunakan

Penggunaan Asas: Isih mengikut Lajur Tunggal

// 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'));

Isih mengikut Berbilang Lajur:

// Sort $data by "number" and then by the zero-indexed column (ID)
uasort($data, make_comparer('number', 0));

Ciri Terperinci

Isih Songsang:

// Sort $data by "name" descending
uasort($data, make_comparer(['name', SORT_DESC]));

Unjuran Tersuai:

// Sort $data by "birthday" using date_create as a projection
uasort($data, make_comparer(['birthday', SORT_ASC, 'date_create']));

Menggabungkan Ciri:

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

Kesimpulan

Penyelesaian ini menyediakan pelbagai keupayaan untuk mengisih tatasusunan berbilang dimensi dalam PHP. Fleksibiliti dan kemudahan penggunaannya menjadikannya alat yang berkuasa untuk manipulasi data dalam pelbagai senario.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyisih Tatasusunan Multidimensi dengan Cekap dalam PHP?. 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