다차원 배열을 정렬하려면
1 정렬된 데이터를 가져와 $arrSort 배열에 넣는 것이 좋습니다. 키 인덱스는 정렬할 배열의 인덱스이므로 고유성을 보장합니다.
2 정렬 기능을 사용하여 $arrSort를 정렬합니다.
3 $arrSort를 탐색하고 해당 인덱스에 따라 다차원 배열의 데이터를 얻고 정렬된 다차원 배열을 재구성합니다.
코드는 다음과 같습니다.
Array
(
[0] => Array
(
[link] => test
[name] => test.rpm
[type] => file
[size] => 988.9k
[mtime] => 1185160178)
....
)
I 정렬 기능을 찾았어요 효율적이지만 매우 실용적입니다.
코드는 다음과 같습니다.
_array_sort($arrFile, 1, 1);//이름 필드에 따라 정렬
_array_sort ($arrFile, 3, 1);//크기에 따라 필드 정렬
/*
@records 정렬할 배열
@field 정렬할 필드, 숫자인지 확인
@ 역순 또는 역순
*/
function _array_sort( $records, $field, $reverse, $defaultSortField = 0)
{
$uniqueSortId =
$hash = array( );
$sortedRecords = array();
$ tempArr = array();
$indexedArray = array()
$recordArray = array();
foreach( $record를 $record로 저장)
{
$uniqueSortId++;
$recordStr = implode("|", $record)."|".$uniqueSortId;
$recordArray[] =explore(" |", $recordStr);
}
$primarySortIndex = count($record);
$records = $recordArray;
foreach($records as $record)
{
$hash[$record[$primarySortIndex]] = $record[$field];
}
uasort($hash, "strnatcasecmp")
if($reverse)
$hash = array_reverse($hash, true);
$valueCount = array_count_values($hash);
foreach($hash as $primaryKey => $value)
{
$indexedArray[] = $primaryKey;
}
$i = 0
foreach($hash as $primaryKey => $value)
{
$i++;
if($valueCount[$value] > 1)
{
foreach($records as $record)
{
if($primaryKey == $record[$ PrimarySortIndex])
{
$tempArr[$record[ $defaultSortField]."__".$i] = $record
break; $index = array_search($primaryKey, $indexedArray);
if(($i == count($records)) || ($value != $hash[$indexedArray[$index+1]] ))
uksort($tempArr, "strnatcasecmp ");
if($reverse)
$tempArr = array_reverse($tempArr);
{
$sortedRecords [ ] = $newRecs
$tempArr = array()
}
}
{
foreach($records as $record)
{
if($primaryKey == $record[$primarySortIndex])
{
$sortedRecords[] = $record;
break;
}
}
}
}
return $sortedRecords;
}
II array_map 및 array_mutisort를 사용하여
또한 여러 값을 기반으로 2차 또는 3차 정렬을 수행합니다. 이는 위와 같습니다.
array_map을 사용하여 정렬할 배열을 가져옵니다.
$arrField = array_map(create_function('$n', 'return $n["size" ];'), $arrFile)
$array_multisort($arrField, SORT_DESC, $arrFile);
III 최종 테스트
188개의 데이터로 배열을 테스트하고 50번 정렬하여 평균을 구합니다.
첫 번째 방법
0.04267142 크기
두 번째 방법
0.001249 이름
0.00083924 크기
읽어주셔서 감사합니다. 더 많은 관련 내용을 알고 싶으시다면 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!