Heim  >  Artikel  >  php教程  >  php array_map array_multisort verwaltet effizient die mehrdimensionale Array-Sortierung

php array_map array_multisort verwaltet effizient die mehrdimensionale Array-Sortierung

黄舟
黄舟Original
2016-12-14 13:11:431405Durchsuche

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 🎜>Der Code lautet wie folgt:
Array

(

[0] => Array
(
[link] => test
[name] => test.rpm
[Typ] => Datei
[Größe] => 988,9 KB
[mtime] => 1185160178)
....
)

Ich habe eine Sortierfunktion gefunden im Internet vor langer Zeit. Effizient, aber sehr praktisch

Der Code lautet wie folgt:

_array_sort($arrFile, 1, 1);// Nach dem Namensfeld sortieren

_array_sort ($arrFile, 3, 1);//Nach Größe Feldsortierung

/*
@records Zu sortierendes Array
@field Zu sortierendes Feld, beachten Sie, ob es eine Zahl ist
@ Vorwärts- oder Rückwärtsreihenfolge
*/
function _array_sort( $records, $field, $reverse, $defaultSortField = 0)
{
$uniqueSortId = 0;
$hash = array( );
$sortedRecords = array();
$indexedArray = array();

foreach( $records as $record)
{
$uniqueSortId++;
$recordStr = implode("|", $record)."|".$uniqueSortId;

$recordArray[] = explosion(" |", $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;
}
}

$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 Verwenden Sie array_map und array_mutisort, um
array_mutisor zu sortieren Führen Sie auch eine sekundäre oder tertiäre Sortierung basierend auf mehreren Werten durch. Eine Funktion kann nicht verglichen werden.

Der Code lautet wie folgt:
Verwenden Sie array_map, um das zu sortierende Array abzurufen
$arrField = array_map(create_function('$n', 'return $n["size" ];'), $arrFile);

III Abschlusstest
Mit 188 Daten Das Array wird 50 Mal getestet, um den Durchschnitt zu ermitteln

Der erste Weg

0,04269016 Name
0,04267142 Größe

Die zweiter Weg

0,001249 Name
0,00083924 Größe

Vielen Dank fürs Lesen. Wenn Sie weitere verwandte Inhalte erhalten möchten, achten Sie bitte auf die chinesische PHP-Website (www.php.cn)!

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