Soalan:
Bagaimana saya boleh mengisih tatasusunan dalam PHP mengikut dua atau lebih nilai medan, sama seperti menggunakan klausa "ORDER BY" dalam SQL?
Contoh Tatasusunan:
$data = [ [ "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 ] ];
Isih Diingini:
Isih tatasusunan dalam tertib menaik "return_fare " dan kemudian dalam tertib menaik "one_way_fare".
Jawapan:
Fungsi PHP yang betul untuk mengisih tatasusunan mengikut berbilang nilai medan ialah array_multisort(). Berikut ialah contoh cara untuk mencapai pengisihan yang diingini:
// Extract the relevant columns $return_fare = array_column($data, 'return_fare'); $one_way_fare = array_column($data, 'one_way_fare'); // Sort the array array_multisort($return_fare, SORT_ASC, $one_way_fare, SORT_ASC, $data);
Penggunaan Ringkas dengan array_orderby()
Anda boleh memudahkan kod menggunakan fungsi array_orderby() daripada Manual PHP:
$sorted = array_orderby($data, 'return_fare', SORT_ASC, 'one_way_fare', SORT_ASC);
Array dengan Array (Loops vs. array_column())
Jika tatasusunan anda mengandungi tatasusunan, anda boleh menggunakan gelung untuk mengekstrak nilai yang berkaitan sebelum mengisih:
$return_fare = []; $one_way_fare = []; foreach ($data as $row) { $return_fare[] = $row['return_fare']; $one_way_fare[] = $row['one_way_fare']; }
Atau, jika menggunakan PHP 5.5 atau lebih baru, anda boleh menggunakan array_column():
array_multisort(array_column($data, 'return_fare'), SORT_ASC, array_column($data, 'one_way_fare'), SORT_ASC, $data);
Atas ialah kandungan terperinci Bagaimana untuk Mengisih Tatasusunan PHP dengan Pelbagai Medan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!