Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah Saya Boleh Isih Tatasusunan PHP Berbilang Dimensi mengikut Nilai Subarray?

Bagaimanakah Saya Boleh Isih Tatasusunan PHP Berbilang Dimensi mengikut Nilai Subarray?

Linda Hamilton
Lepaskan: 2024-12-07 05:42:14
asal
846 orang telah melayarinya

How Can I Sort a Multidimensional PHP Array by a Subarray's Value?

Mengisih Tatasusunan mengikut Nilai Subarray dalam PHP

Memesan struktur data ialah tugas pengaturcaraan biasa dan tatasusunan kerap digunakan untuk menyimpan dan mengurus koleksi maklumat. Dalam PHP, tatasusunan boleh mengandungi struktur bersarang, termasuk tatasusunan sebagai nilai. Mengisih tatasusunan berbilang dimensi boleh berguna untuk pelbagai sebab, seperti menyusun data atau mengekstrak elemen tertentu.

Pernyataan Masalah:

Pertimbangkan struktur tatasusunan berikut:

$array = [
    [
        'configuration_id' => 10,
        'id' => 1,
        'optionNumber' => 3,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    [
        'configuration_id' => 9,
        'id' => 1,
        'optionNumber' => 2,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    [
        'configuration_id' => 8,
        'id' => 1,
        'optionNumber' => 1,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
];
Salin selepas log masuk

Matlamatnya adalah untuk mengisih tatasusunan ini secara berperingkat berdasarkan kekunci 'optionNumber', menghasilkan berikut:

$sortedArray = [
    [
        'configuration_id' => 8,
        'id' => 1,
        'optionNumber' => 1,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    [
        'configuration_id' => 9,
        'id' => 1,
        'optionNumber' => 2,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
    [
        'configuration_id' => 10,
        'id' => 1,
        'optionNumber' => 3,
        'optionActive' => 1,
        'lastUpdated' => '2010-03-17 15:44:12'
    ],
];
Salin selepas log masuk

Penyelesaian:

Untuk mengisih tatasusunan, kita boleh menggunakan fungsi usort PHP. usort mengambil dua hujah: tatasusunan untuk diisih, dan fungsi perbandingan yang menentukan susunan unsur. Fungsi perbandingan harus mengembalikan nilai negatif jika elemen pertama harus datang sebelum yang kedua, sifar jika setara dan nilai positif jika elemen pertama harus datang selepas elemen kedua.

Dalam kes ini, perbandingan kami fungsi boleh ditakrifkan seperti berikut:

function cmp_by_optionNumber($a, $b) {
  return $a['optionNumber'] - $b['optionNumber'];
}
Salin selepas log masuk

Fungsi ini menolak nilai 'optionNumber' tatasusunan pertama daripada yang kedua, menghasilkan nilai negatif jika elemen pertama harus didahulukan sebelum kedua, nilai sifar jika ia sama dan nilai positif jika elemen pertama harus datang selepas yang kedua.

Untuk menggunakan fungsi perbandingan ini dengan usort, kami hanya menyampaikannya sebagai hujah kedua:

usort($array, 'cmp_by_optionNumber');
Salin selepas log masuk

Ini akan mengisih tatasusunan di tempatnya, mengubah suai pembolehubah $array asal untuk menggambarkan susunan yang diisih. Pembolehubah $array yang terhasil akan sama dengan contoh $sortedArray yang disediakan sebelum ini.

Sintaks Alternatif:

Dalam PHP versi 5.3 dan lebih baru, fungsi tanpa nama boleh digunakan bukannya fungsi perbandingan yang dinamakan:

usort($array, function ($a, $b) {
  return $a['optionNumber'] - $b['optionNumber'];
});
Salin selepas log masuk

PHP 7.0 dan Di atas:

Dalam PHP versi 7.0 dan ke atas, pengendali kapal angkasa <=> boleh digunakan sebagai ganti penolakan dalam fungsi perbandingan untuk mengelakkan masalah limpahan/pemangkasan:

usort($array, function ($a, $b) {
  return $a['optionNumber'] <=> $b['optionNumber'];
});
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Isih Tatasusunan PHP Berbilang Dimensi mengikut Nilai Subarray?. 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