Heim  >  Artikel  >  Backend-Entwicklung  >  php array_map array_multisort verwaltet effizient die mehrdimensionale Array-Sortierung

php array_map array_multisort verwaltet effizient die mehrdimensionale Array-Sortierung

高洛峰
高洛峰Original
2017-01-06 16:57:451491Durchsuche

Um mehrdimensionale Arrays zu sortieren, besteht der allgemeine Ansatz darin,
1 die sortierten Daten zu erhalten und sie in das Array $arrSort einzufügen. Der Schlüsselindex ist der Index des zu sortierenden Arrays, um die Eindeutigkeit sicherzustellen
2 Verwenden Sie die Sortierfunktion sort usw., um $arrSort zu sortieren. 3 Durchlaufen Sie $arrSort, ermitteln Sie die Daten des mehrdimensionalen Arrays gemäß seinem Index und rekonstruieren Sie das sortierte mehrdimensionale Array 🎜>
Ich habe es vor langer Zeit im Internet gefunden. Eine Sortierfunktion, nicht effizient, aber sehr praktisch

Array 
( 
[0] => Array 
( 
[link] => test 
[name] => test.rpm 
[type] => file 
[size] => 988.9k 
[mtime] => 1185160178) 
.... 
)
II Verwenden Sie array_map und array_mutisor zum Sortieren

array_mutisor kann auch sekundäre oder sekundäre Aufgaben ausführen Tertiäre Sortierung basierend auf mehreren Werten, dies ist die vorherige Funktion, die nicht verglichen werden kann
_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; 
}

III Endtest

Testen Sie mit einem Array von 188 Daten, sortieren Sie 50 Mal, um den Durchschnitt zu finden
利用array_map获取要依据排序的数组 
$arrField = array_map(create_function('$n', 'return $n["size"];'), $arrFile); 
//利用array_mutisort来进行排序 
$array_multisort($arrField, SORT_DESC, $arrFile);
Die erste Methode

0,04269016 Name
0,04267142 Größe
Zweite Methode
0,001249 Name
0,00083924 Größe

Die Ergebnisse sind selbstverständlich

Weitere verwandte Artikel zu php array_map array_multisort Effiziente Verarbeitung der mehrdimensionalen Array-Sortierung Bitte beachten Sie die chinesische PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn