Bagaimanakah anda mengatur tatasusunan berbilang dimensi dengan cekap berdasarkan lajur yang ditentukan, terutamanya apabila data termasuk tarikh dan anda inginkan kriteria pengisihan tersuai?
Memperkenalkan Penyelesaian Dipertingkat untuk PHP 5.3
Penyelesaian ini menawarkan beberapa kelebihan:
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; }; }
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'), );
Isih Asas:
Isih dengan Berbilang Lajur:
Terperinci Ciri:
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'] ));
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!