Eingehende Analyse der PHP-Funktion array_multisort()

高洛峰
Freigeben: 2023-03-04 16:52:01
Original
1361 Leute haben es durchsucht

1. Schauen wir uns zunächst die einfachste Situation an. Es gibt zwei Arrays:
$arr1 = array(1,9,5);
$arr2 = array(6,2,4);
array_multisort($arr1,$arr2);
print_r($arr1); //Die erhaltene Reihenfolge ist 1,5,9
print_r($arr2); //Die erhaltene Reihenfolge ist 6,4,2
Ich schätze, dass die Werte von Die beiden Arrays sind von Anfang bis Ende gleich. Dementsprechend: 1 entspricht 6, 9 entspricht 2 und 5 entspricht 4.
Lassen Sie uns ein weiteres Array hinzufügen und sehen, was passiert:
$arr1 = array(1,9,5);
$arr2 = array(6,2,4);
$arr3 = array (3,7,8);
array_multisort($arr1,$arr2,$arr3);
Bei Betrachtung der Ergebnisse entspricht 1 6 und 3 von Anfang bis Ende, und das Gleiche gilt für andere Elemente . Diese Entsprechung wird im Handbuch als „Beibehaltung der ursprünglichen Schlüsselnamenzuordnung während der Sortierung“ bezeichnet.
Sie können sich jedes Array auch als Spalte in einer Datenbanktabelle vorstellen. Die entsprechenden 1,6,3 sind eine Datenzeile und 9,2,7 sind eine andere Datenzeile. . .
array_multisort sortiert zuerst nach dem ersten Array (stellen Sie sich eine Spalte vor). Wenn die Werte des ersten Arrays (Spalte) gleich sind, wird nach dem zweiten Array (Spalte) sortiert.
Sie können das folgende Programm zum Testen verwenden:
$arr1 = array(1,9,5,9);
$arr2 = array(6,2,4,1);
$ arr3 = array(3,7,8,0);
array_multisort($arr1,$arr2,$arr3);
Sie können sich vorstellen, dass das Ergebnis von $arr3 hier (3,8,0,7 ist ).

2. Als nächstes erklären wir die Parameter von array_multisort. Die Parameter dieser Funktion sind sehr flexibel. Der einfachste Fall besteht darin, wie oben gezeigt 1 oder n Arrays als Parameter zu verwenden. Dabei ist zu beachten, dass die Anzahl der Elemente in jedem Array gleich sein muss, da sonst eine Warnung zum Fehlschlagen der Sortierung führt.
So array_multisort($arr1,$arr2,$arr3); Standardmäßig werden alle Arrays in aufsteigender Reihenfolge sortiert. Wenn Sie $arr2 in absteigender Reihenfolge sortieren und als Zeichenfolge vergleichen möchten, müssen Sie schreiben :
array_multisort( $arr1, $arr2, SORT_DESC, SORT_STRING, $arr3);
Jedem Array kann ein Sortierreihenfolge-Flag oder ein Sortiertyp-Flag folgen, oder beide Flags können gleichzeitig erscheinen. Nach jedem Array kann jedoch nur ein Sortierflag jedes Typs erscheinen.
Details lauten wie folgt:
Sortierungsreihenfolge-Flags:
SORT_ASC – Elemente in aufsteigender Reihenfolge sortieren (Standard)
SORT_DESC – Elemente in absteigender Reihenfolge sortieren
Sortiertyp-Flags:
SORT_REGULAR – Elemente in normaler Reihenfolge sortieren Methodenvergleich (Standard)
SORT_NUMERIC – Elemente basierend auf numerischen Werten vergleichen
SORT_STRING – Elemente basierend auf Zeichenfolgen vergleichen

3. Was ist schließlich die eigentliche Funktion von array_multisort? ?
Normalerweise haben wir einige mehrdimensionale Arrays, die sortiert werden müssen:

$guys = Array
(
    [0] => Array
        (
 [name] => jake
 [score] => 80
 [grade] => A
        )
    [1] => Array
        (
 [name] => jin
 [score] => 70
 [grade] => A
        )
    [2] => Array
        (
 [name] => john
 [score] => 80
 [grade] => A
        )
    [3] => Array
        (
 [name] => ben
 [score] => 20
 [grade] => B
        )
)
Nach dem Login kopieren

Zum Beispiel möchten wir in umgekehrter Reihenfolge nach Noten sortieren, und wenn die Noten gleich sind, nach Namen sortieren in aufsteigender Reihenfolge.
Zu diesem Zeitpunkt müssen wir zwei weitere Arrays entsprechend der Reihenfolge von $guys erstellen:
$scores = array(80,70,80,20);
$names = array('jake', ' jin','john','ben');
Dann
array_multisort($scores, SORT_DESC, $names, $guys); Das ist es
Kann es flexibler sein, wann immer Sie möchten Sortieren Brauchen wir zusätzliche Arrays?
Tatsächlich ist es gut in der Klasse helper_array von qeephp gekapselt. Hier sind seine beiden Methoden. Wer es benötigt, kann es verwenden, nachdem er es selbst geändert hat:

/**
* 根据指定的键对数组排序
*
* 用法:
* @code php
* $rows = array(
*array('id' => 1, 'value' => '1-1', 'parent' => 1),
*array('id' => 2, 'value' => '2-1', 'parent' => 1),
*array('id' => 3, 'value' => '3-1', 'parent' => 1),
*array('id' => 4, 'value' => '4-1', 'parent' => 2),
*array('id' => 5, 'value' => '5-1', 'parent' => 2),
*array('id' => 6, 'value' => '6-1', 'parent' => 3),
* );
*
* $rows = Helper_Array::sortByCol($rows, 'id', SORT_DESC);
* dump($rows);
* // 输出结果为:
* // array(
* //         array('id' => 6, 'value' => '6-1', 'parent' => 3),
* //         array('id' => 5, 'value' => '5-1', 'parent' => 2),
* //         array('id' => 4, 'value' => '4-1', 'parent' => 2),
* //         array('id' => 3, 'value' => '3-1', 'parent' => 1),
* //         array('id' => 2, 'value' => '2-1', 'parent' => 1),
* //         array('id' => 1, 'value' => '1-1', 'parent' => 1),
* // )
* @endcode
*
* @param array $array 要排序的数组
* @param string $keyname 排序的键
* @param int $dir 排序方向
*
* @return array 排序后的数组
*/
          static function sortByCol($array, $keyname, $dir = SORT_ASC)
          {
   return self::sortByMultiCols($array, array($keyname => $dir));
          }
          /**
* 将一个二维数组按照多个列进行排序,类似 SQL 语句中的 ORDER BY
*
* 用法:
* @code php
* $rows = Helper_Array::sortByMultiCols($rows, array(
*'parent' => SORT_ASC, 
*'name' => SORT_DESC,
* ));
* @endcode
*
* @param array $rowset 要排序的数组
* @param array $args 排序的键
*
* @return array 排序后的数组
*/
          static function sortByMultiCols($rowset, $args)
          {
   $sortArray = array();
   $sortRule = '';
   foreach ($args as $sortField => $sortDir) 
   {
       foreach ($rowset as $offset => $row) 
       {
$sortArray[$sortField][$offset] = $row[$sortField];
       }
       $sortRule .= '$sortArray[\'' . $sortField . '\'], ' . $sortDir . ', ';
   }
   if (empty($sortArray) || empty($sortRule)) { return $rowset; }
   eval('array_multisort(' . $sortRule . '$rowset);');
   return $rowset;
          }
Nach dem Login kopieren

Mehr PHP array_multisort() Für Für eine ausführliche Funktionsanalyse beachten Sie bitte die chinesische PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!