> php教程 > PHP开发 > 본문

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

黄舟
풀어 주다: 2016-12-14 13:11:43
원래의
1401명이 탐색했습니다.

다차원 배열을 정렬하려면
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);

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_mutisort를 사용하여
또한 여러 값을 기반으로 2차 또는 3차 정렬을 수행합니다. 이는 위와 같습니다.

코드는 다음과 같습니다.

array_map을 사용하여 정렬할 배열을 가져옵니다.
$arrField = array_map(create_function('$n', 'return $n["size" ];'), $arrFile)

//array_mutisor를 사용하여 정렬

$array_multisort($arrField, SORT_DESC, $arrFile);

III 최종 테스트
188개의 데이터로 배열을 테스트하고 50번 정렬하여 평균을 구합니다.
첫 번째 방법

0.04269016 이름

0.04267142 크기
두 번째 방법
0.001249 이름
0.00083924 크기

읽어주셔서 감사합니다. 더 많은 관련 내용을 알고 싶으시다면 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿