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
Lepaskan: 2024-12-22 02:30:17
asal
752 orang telah melayarinya

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
    };
}
Salin selepas log masuk

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'));
Salin selepas log masuk

Isih mengikut Berbilang Lajur:

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

Ciri Terperinci

Isih Songsang:

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

Unjuran Tersuai:

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

Menggabungkan Ciri:

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

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan