Rumah > pembangunan bahagian belakang > tutorial php > Bagaimana untuk Menyusun Susunan PHP Berbilang Dimensi dengan Cekap mengikut Lajur, Termasuk Tarikh dan Kriteria Tersuai?

Bagaimana untuk Menyusun Susunan PHP Berbilang Dimensi dengan Cekap mengikut Lajur, Termasuk Tarikh dan Kriteria Tersuai?

Susan Sarandon
Lepaskan: 2024-12-20 16:34:09
asal
879 orang telah melayarinya

How to Efficiently Sort a Multidimensional PHP Array by Column, Including Dates and Custom Criteria?

Mengisih Tatasusunan Berbilang Dimensi dalam PHP: Pendekatan Fleksibel

Pertanyaan

Bagaimanakah anda mengatur tatasusunan berbilang dimensi dengan cekap berdasarkan lajur yang ditentukan, terutamanya apabila data termasuk tarikh dan anda inginkan kriteria pengisihan tersuai?

The Jawapan

Memperkenalkan Penyelesaian Dipertingkat untuk PHP 5.3

Penyelesaian ini menawarkan beberapa kelebihan:

  • Boleh Digunakan Semula: Tentukan lajur isihan sebagai a pembolehubah.
  • Fleksibel: Kendalikan berbilang lajur isihan dan pemecah seri kedua.
  • Boleh Balik: Isih sama ada dalam tertib menaik atau menurun untuk setiap lajur.
  • Boleh Diperluas: Gunakan unjuran tersuai untuk kompleks atau data bukan setanding.
  • Asosiatif: Gunakan usort atau uasort untuk keserasian dengan tatasusunan bersekutu.

Kod

function make_comparer() {
    // Normalize criteria
    $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) {
            // Comparison details
            list($column, $sortOrder, $projection) = $criterion;
            $sortOrder = $sortOrder === SORT_DESC ? -1 : 1;

            // Project and compare values
            $lhs = $projection ? call_user_func($projection, $first[$column]) : $first[$column];
            $rhs = $projection ? call_user_func($projection, $second[$column]) : $second[$column];

            // Determine the comparison result
            if ($lhs < $rhs) {
                return -1 * $sortOrder;
            } elseif ($lhs > $rhs) {
                return 1 * $sortOrder;
            }
        }

        // Tiebreakers exhausted
        return 0;
    };
}
Salin selepas log masuk

Penggunaan

Pertimbangkan sampel data:

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

Isih Asas:

  • Isih mengikut lajur "nama": usort($data, make_comparer('name'));

Isih dengan Berbilang Lajur:

  • Isih mengikut lajur "nombor" dan kemudian mengikut lajur berindeks sifar: usort($data, make_comparer('number', 0));

Terperinci Ciri:

  • Isih Songsang: Isih mengikut lajur "nama" menurun: usort($data, make_comparer(['name', SORT_DESC]));
  • Unjuran Tersuai: Unjurkan tarikh hari lahir hingga cap masa untuk mengisih: usort($data, make_comparer(['birthday', SORT_ASC, 'date_create']));

Kes Penggunaan Kompleks:

  • Isih mengikut lajur "nombor" yang menurun, diikuti dengan lajur "hari lahir" yang diunjurkan menaik:

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

Atas ialah kandungan terperinci Bagaimana untuk Menyusun Susunan PHP Berbilang Dimensi dengan Cekap mengikut Lajur, Termasuk Tarikh dan Kriteria Tersuai?. 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