Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Mengisih Tatasusunan PHP Berbilang Dimensi mengikut Pelbagai Medan?

Bagaimana untuk Mengisih Tatasusunan PHP Berbilang Dimensi mengikut Pelbagai Medan?

Patricia Arquette
Patricia Arquetteasal
2024-11-20 03:07:01717semak imbas

How to Sort a Multidimensional PHP Array by Multiple Fields?

Mengisih Tatasusunan mengikut Berbilang Nilai Medan dalam PHP

Masalah:

Anda mempunyai tatasusunan dengan struktur data yang kompleks dan anda perlu mengisih nilai berdasarkan berbilang nilai medan dalam tertib menaik.

Contoh:

Pertimbangkan tatasusunan berikut:

$array = [
    [
        "destination" => "Sydney",
        "airlines" => "airline_1",
        "one_way_fare" => 100,
        "return_fare" => 300
    ],
    [
        "destination" => "Sydney",
        "airlines" => "airline_2",
        "one_way_fare" => 150,
        "return_fare" => 350
    ],
    [
        "destination" => "Sydney",
        "airlines" => "airline_3",
        "one_way_fare" => 180,
        "return_fare" => 380
    ]
];

Anda mahu mengisih tatasusunan ini dengan mula-mula "return_fare" dalam tertib menaik dan kemudian dengan "one_way_fare" juga dalam tertib menaik.

Penyelesaian:

Untuk mengisih tatasusunan seperti yang diterangkan, anda boleh menggunakan fungsi array_multisort(). Walau bagaimanapun, ia memerlukan anda mengekstrak nilai yang anda ingin isikan ke dalam tatasusunan berasingan. Ini boleh dilakukan menggunakan array_column().

// Extract "return_fare" and "one_way_fare" into separate arrays
$return_fare = array_column($array, 'return_fare');
$one_way_fare = array_column($array, 'one_way_fare');

// Sort the array using multiple criteria
array_multisort($return_fare, SORT_ASC, $one_way_fare, SORT_ASC, $array);

Selepas mengisih, $array akan diubah suai untuk mencerminkan susunan yang diisih.

Penyelesaian Alternatif:

Anda juga boleh menggunakan fungsi array_orderby() daripada halaman manual PHP untuk memudahkan kod di atas:

// Sort the array using "array_orderby"
$sorted = array_orderby($array, 'return_fare', SORT_ASC, 'one_way_fare', SORT_ASC);

Nota:

Jika anda menggunakan PHP 5.5 atau lebih tinggi, anda boleh mengelakkan gelung dengan menggunakan array_column() terus dengan array_multisort():

array_multisort(
    array_column($array, 'return_fare'), SORT_ASC,
    array_column($array, 'one_way_fare'), SORT_ASC,
    $array
);

Atas ialah kandungan terperinci Bagaimana untuk Mengisih Tatasusunan PHP Berbilang Dimensi mengikut Pelbagai Medan?. 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