지정된 열을 기준으로 다차원 배열을 효율적으로 정렬하는 방법은 무엇입니까? 특히 데이터에 날짜가 포함되어 있고 사용자 정의 정렬 기준을 원하는 경우?
PHP 5.3을 위한 향상된 솔루션 소개
이 솔루션은 여러 가지 장점을 제공합니다.
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; }; }
샘플을 고려해보세요 데이터:
$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'), );
기본 정렬:
여러 항목으로 정렬 열:
고급 기능:
복잡한 사용 사례:
"숫자" 열을 기준으로 내림차순으로 정렬한 다음 예상된 "생일" 열이 옵니다. 오름차순:
usort($data, make_comparer( ['number', SORT_DESC], ['birthday', SORT_ASC, 'date_create'] ));
위 내용은 날짜 및 사용자 정의 기준을 포함하여 다차원 PHP 배열을 열별로 효율적으로 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!