Rumah > Artikel > pembangunan bahagian belakang > Isih Tatasusunan Berbilang Dimensi mengikut Elemen Tarikh dalam PHP
Dalam PHP, anda boleh mengisih tatasusunan berbilang dimensi mengikut elemen tertentu, seperti tarikh, menggunakan pelbagai pendekatan. Mari kita terokai beberapa kaedah yang berbeza.
Menggunakan array_multisort()
Menggunakan fungsi perbandingan tersuai
Menggunakan fungsi array_multisort() dengan panggilan balik
Berikut ialah contoh menyusun tatasusunan berbilang dimensi mengikut elemen tarikh menggunakan array_multisort():
$multiArray = array( array('date' => '2023-06-01', 'name' => 'John'), array('date' => '2023-05-15', 'name' => 'Alice'), array('date' => '2023-06-10', 'name' => 'Bob') ); // Extract the 'date' and 'name' columns into separate arrays $dates = array_column($multiArray, 'date'); $names = array_column($multiArray, 'name'); // Sort the multidimensional array based on the 'date' column array_multisort($dates, SORT_ASC, $names, SORT_ASC, $multiArray); // Output the sorted array print_r($multiArray);
Dalam contoh ini, kita mempunyai tatasusunan berbilang dimensi $multiArray di mana setiap elemen mempunyai kunci 'tarikh' dan 'nama'. Untuk mengisih tatasusunan mengikut elemen 'tarikh', kami mula-mula mengekstrak lajur 'tarikh' dan 'nama' ke dalam tatasusunan berasingan menggunakan array_column().
Kemudian, kami menggunakan array_multisort() untuk melaksanakan pengisihan. Kami menentukan $tarikh sebagai tatasusunan pertama untuk diisih dan SORT_ASC sebagai susunan pengisihan. Kami juga menyediakan $names sebagai tatasusunan kedua untuk diisih, memastikan lajur 'nama' kekal sejajar dengan lajur 'tarikh' yang diisih.
Akhir sekali, tatasusunan multidimensi $multiArray diisih berdasarkan elemen 'tarikh' dan tatasusunan yang diisih dicetak menggunakan print_r().
Fungsi array_multisort() ialah alat yang berkuasa untuk mengisih tatasusunan berbilang dimensi berdasarkan satu atau lebih lajur. Ia membolehkan anda menentukan berbilang tatasusunan untuk diisih secara serentak, memastikan elemen yang sepadan kekal disegerakkan.
Berikut ialah contoh mengisih tatasusunan berbilang dimensi mengikut elemen tarikh menggunakan fungsi perbandingan tersuai dengan usort():
$multiArray = array( array('date' => '2023-06-01', 'name' => 'John'), array('date' => '2023-05-15', 'name' => 'Alice'), array('date' => '2023-06-10', 'name' => 'Bob') ); // Define a custom comparison function function compareDates($a, $b) { $dateA = strtotime($a['date']); $dateB = strtotime($b['date']); if ($dateA == $dateB) { return 0; } elseif ($dateA > $dateB) { return 1; } else { return -1; } } // Sort the multidimensional array using the custom comparison function usort($multiArray, 'compareDates'); // Output the sorted array print_r($multiArray);
Dalam contoh ini, kami mempunyai tatasusunan berbilang dimensi $multiArray dengan elemen 'tarikh' dan 'nama'. Kami mentakrifkan fungsi perbandingan tersuai compareDates() yang membandingkan nilai 'tarikh' dua elemen menggunakan strtotime().
Di dalam fungsi compareDates(), kami menukar nilai 'date' $a dan $b kepada cap masa menggunakan strtotime(). Kemudian, kami membandingkan cap masa dan mengembalikan hasil yang sesuai (-1 untuk $a < $b, 0 untuk $a = $b, 1 untuk $a > $ ).
Kami menggunakan fungsi usort() untuk mengisih tatasusunan berbilang dimensi $multiArray berdasarkan elemen 'tarikh' menggunakan fungsi compareDates() sebagai fungsi perbandingan.
Akhir sekali, tatasusunan yang diisih dicetak menggunakan print_r().
Dengan menggunakan fungsi perbandingan tersuai, anda mempunyai kawalan penuh ke atas logik perbandingan, membenarkan kriteria pengisihan yang lebih kompleks berdasarkan elemen 'tarikh' atau mana-mana kriteria lain pilihan anda.
Berikut ialah contoh mengisih tatasusunan berbilang dimensi mengikut elemen tarikh menggunakan fungsi array_multisort() dengan panggilan balik:
$multiArray = array( array('date' => '2023-06-01', 'name' => 'John'), array('date' => '2023-05-15', 'name' => 'Alice'), array('date' => '2023-06-10', 'name' => 'Bob') ); // Create an array to hold the 'date' values $dates = array(); foreach ($multiArray as $key => $row) { $dates[$key] = strtotime($row['date']); } // Sort the multidimensional array based on the 'date' values using array_multisort() with a callback array_multisort($dates, SORT_ASC, $multiArray); // Output the sorted array print_r($multiArray);
Dalam contoh ini, kami mula-mula mencipta tatasusunan $tarikh untuk menyimpan nilai cap masa yang ditukar bagi elemen 'tarikh' dalam tatasusunan berbilang dimensi. Kami mengulangi setiap elemen $multiArray, gunakan strtotime() untuk menukar nilai 'tarikh' kepada cap masa dan menyimpannya dalam indeks $ tarikh yang sepadan.
Kemudian, kami menggunakan fungsi array_multisort() untuk mengisih kedua-dua $tarikh dan $multiArray. Kami lulus $tarikh sebagai tatasusunan pertama untuk diisih, menentukan SORT_ASC untuk tertib menaik. Sebagai hujah kedua, kami menyediakan $multiArray untuk memastikan ia disusun berdasarkan susunan tarikh $.
Akhir sekali, tatasusunan berbilang dimensi yang diisih dicetak menggunakan print_r().
Dengan menggunakan fungsi array_multisort() dengan panggilan balik, anda boleh menggunakan logik pengisihan tersuai pada tatasusunan berbilang dimensi. Dalam kes ini, kami menukar elemen 'tarikh' kepada cap masa dan menggunakannya untuk mengisih.
Ketiga-tiga kaedah boleh mengisih tatasusunan berbilang dimensi mengikut elemen tarikh dengan berkesan. Pilihan bergantung pada keperluan dan pilihan khusus anda. Jika anda lebih suka kawalan atau perlu mengendalikan perbandingan yang rumit, pendekatan pertama dengan fungsi pengisihan tersuai ialah pilihan yang baik. Jika kesederhanaan dan kecekapan adalah penting, pendekatan kedua atau ketiga boleh digunakan, dengan pendekatan kedua lebih cekap sedikit.
Atas ialah kandungan terperinci Isih Tatasusunan Berbilang Dimensi mengikut Elemen Tarikh dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!