>  기사  >  백엔드 개발  >  php array_map array_multisort는 다차원 배열 정렬을 효율적으로 처리합니다.

php array_map array_multisort는 다차원 배열 정렬을 효율적으로 처리합니다.

高洛峰
高洛峰원래의
2017-01-06 16:57:451491검색

다차원 배열을 정렬하려면
1 정렬된 데이터를 가져와 $arrSort 배열에 넣는 것이 좋습니다. 키 인덱스는 정렬할 배열의 인덱스이므로 고유성을 보장합니다.
2 정렬 기능을 사용하여 $arrSort를 정렬합니다.
3 $arrSort를 탐색하고 해당 인덱스에 따라 다차원 배열의 데이터를 얻고 정렬된 다차원 배열을 재구성합니다.

Array 
( 
[0] => Array 
( 
[link] => test 
[name] => test.rpm 
[type] => file 
[size] => 988.9k 
[mtime] => 1185160178) 
.... 
)

오래 전에 인터넷에서 찾았습니다. 정렬 기능은 효율적이지는 않지만 매우 실용적입니다.

_array_sort($arrFile, 1, 1);//根据name字段排序 
_array_sort($arrFile, 3, 1);//根据size字段排序 
/* 
@records 要排序的数组 
@field要排序的字段,注意是数字 
@reverse正序还是反序 
*/ 
function _array_sort($records, $field, $reverse, $defaultSortField = 0) 
{ 
$uniqueSortId = 0; 
$hash = array(); 
$sortedRecords = array(); 
$tempArr = array(); 
$indexedArray = array(); 
$recordArray = array(); 

foreach($records as $record) 
{ 
$uniqueSortId++; 
$recordStr = implode("|", $record)."|".$uniqueSortId; 
$recordArray[] = explode("|", $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); 

foreach($tempArr as $newRecs) 
{ 
$sortedRecords [] = $newRecs; 
} 

$tempArr = array(); 
} 
} 
else 
{ 
foreach($records as $record) 
{ 
if($primaryKey == $record[$primarySortIndex]) 
{ 
$sortedRecords[] = $record; 
break; 
} 
} 
} 
} 
return $sortedRecords; 
}
II array_map 및 array_mutisor를 사용하여 정렬합니다.

array_mutisor는 보조 또는 보조 작업도 수행할 수 있습니다. 여러 값을 기준으로 한 3차 정렬, 이전 작업입니다.

利用array_map获取要依据排序的数组 
$arrField = array_map(create_function('$n', 'return $n["size"];'), $arrFile); 
//利用array_mutisort来进行排序 
$array_multisort($arrField, SORT_DESC, $arrFile);

III 최종 테스트
188개의 데이터 배열로 테스트하고, 50번 정렬하여 평균을 구합니다. >첫 번째 방법
0.04269016 이름
0.04267142 크기
두 번째 방법
0.001249 이름
0.00083924 크기

결과는 자명합니다

관련 기사 더보기 php array_map array_multisort 다차원 배열 정렬의 효율적인 처리 PHP 중국어 웹사이트에 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.