Beispielcode zum Festlegen der Mehrfeldsortierung für das mehrdimensionale PHP-Array_php-Beispiel

jacklove
Freigeben: 2023-04-01 18:40:02
Original
2317 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich der Beispielcode zum Angeben der Mehrfeldsortierung von mehrdimensionalen PHP-Arrays vorgestellt. Der Herausgeber findet ihn recht gut, daher werde ich ihn jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Editor und werfen wir einen Blick darauf.

Einführung in die Methode array_multisort

array_multisort – Anweisungen zum Sortieren mehrerer Arrays oder mehrdimensionaler Arrays im PHP-Handbuch Wie folgt:

Code kopieren Der Code lautet wie folgt:

bool array_multisort ( array &$arr [, Mixed $arg = SORT_ASC [, Mixed $arg = SORT_REGULAR [, gemischt $ ... ]]] )

Parameter

arr
Ein zu sortierendes Array.

arg
Jedes der folgenden Argumente kann ein anderes Array oder ein Sortierflag-Optionsparameter für das vorherige Array sein: SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING Zusätzliche Argumente.

Implementieren Sie zunächst die Sortierung eines Feldes des angegebenen mehrdimensionalen ArraysHier ist es erforderlich, das Array entsprechend zu sortieren zu einem der Felder. Die Array-Annahmen lauten wie folgt:

  $array = array(
      0=>array('id'=>8,'name'=>'Tom'),
      1=>array('id'=>9,'name'=>'Peter'),
      2=>array('id'=>5,'name'=>'Jack')
  );
Nach dem Login kopieren


Wir möchten nach dem ID-Wert der beiden sortieren -dimensionales Array. Das konvertierte Array-Format lautet wie folgt:

  $array = array(
      0=>array('id'=>5,'name'=>'Jack')
      1=>array('id'=>8,'name'=>'Tom'),
      2=>array('id'=>9,'name'=>'Peter')
  );
Nach dem Login kopieren


Um die obige Konvertierung abzuschließen, müssen Sie die Funktion array_multisort verwenden oben eingeführt, wie folgt:

  function sortArrByOneField(&$array, $field, $desc = false){
    $fieldArr = array();
    foreach ($array as $k => $v) {
     $fieldArr[$k] = $v[$field];
    }
    $sort = $desc == false ? SORT_ASC : SORT_DESC;
    array_multisort($fieldArr, $sort, $array);
  }
Nach dem Login kopieren


beteiligt sich an der Sortierung im eingehenden array_multisort, indem es das $field jedes Arrays des Arrays speichert im Ein-Bit-Array fieldArr sortiert werden. Der Wert des Feldarrays ist wie folgt:

array(0=>8,1=>9,2=>5)
Nach dem Login kopieren


Nach der Übergabe von array_multisort entspricht dies dem Sortieren des $field eins- dimensionales Array und rekonstruieren dann gemäß den sortierten Schlüsseln das eingehende Array, das sortiert werden soll.

Implementieren der Sortierung mehrdimensionaler Arrays durch Angabe mehrerer FelderDas obige Beispiel erklärt, wie die Sortierung mehrdimensionaler Arrays durch Angabe implementiert wird ein Feld, aber wenn Sie möchten, wie denken Sie darüber nach, mehrere Felder anzugeben, um ein Array zu sortieren?

Wie viele Felder gibt es? 2, 3 oder mehr, daher muss dieser unsichere Faktor beseitigt werden.



Sehen wir uns zunächst die 2 Lösungen zur Angabe von 2 Feldern zum Sortieren an:

  $arr = array(
    '0' => array(
      'id' => 3,
      'age' => 27 
    ),
    '1' => array(
      'id' => 5,
      'age' => 50
    ),
    '2' => array(
      'id' => 4,
      'age' => 44
    ),
    '3' => array(
      'id' => 3,
      'age' => 78
    ) 
  );
  foreach ( $arr as $key => $row ){
    $id[$key] = $row ['id'];
    $age[$key] = $row ['age'];
  }
  array_multisort($id, SORT_ASC, $age, SORT_DESC, $arr);
  print_r($arr);
  //result:Array([0]=>Array(['id']=>3 ['age']=>78) [1]=>Array(['id']=>3 ['age']=>27) [2]=>Array(['id']=>4 ['age']=>44) [3]=>Array(['id']=>5 ['age']=>50))
Nach dem Login kopieren


Refactoring In Solange der obige Code die Funktion func_get_args in PHP verwendet, um den eingehenden Wert dynamisch abzurufen, kann er das Problem der unsicheren Anzahl mehrerer Felder lösen. Die Implementierung ist wie folgt:

  $array1 = array(
        0=>array('id'=>8,'name'=>'Apple','age'=> 18),
        1=>array('id'=>8,'name'=>'Bed','age'=>17),
        2=>array('id'=>5,'name'=>'Cos','age'=>16),
        3=>array('id'=>5,'name'=>'Cos','age'=>14)
  );
  function sortArrByManyField(){
    $args = func_get_args();
    if(empty($args)){
      return null;
    }
    $arr = array_shift($args);
    if(!is_array($arr)){
      throw new Exception("第一个参数不为数组");
    }
    foreach($args as $key => $field){
      if(is_string($field)){
        $temp = array();
        foreach($arr as $index=> $val){
          $temp[$index] = $val[$field];
        }
        $args[$key] = $temp;
      }
    }
    $args[] = &$arr;//引用值
    call_user_func_array('array_multisort',$args);
    return array_pop($args);
  }
  $arr = sortArrByManyField($array1,'id',SORT_ASC,'name',SORT_ASC,'age',SORT_DESC);
  print_r($arr);
Nach dem Login kopieren


Das laufende Ergebnis ist wie folgt:

array(4 ) {
[ 0]=>array(3) {

                                                                                                                                                                                                                                                          Seit ; >string(3) "Cos"
                                                             ["age"]=>int(14) > =>array (3) {
                                                                                                                                                                                                                                                                        Ich hoffe auch, dass jeder die chinesische PHP-Website unterstützt.

Artikel, die Sie interessieren könnten:

PHP-Implementierung von Funktionen zum Hochladen mehrerer Bilder und einzelner Bild-Uploads, PHP-Beispiele

PHP-Implementierung von Name basierend auf Klassen und Methoden in alphabetischer Reihenfolge (Instanzcodes) PHP-Beispiele

Detaillierte Erläuterung des Implementierungsprozesses des PHP-Handy-SMS-Verifizierungscodes PHP-Beispiele

Das obige ist der detaillierte Inhalt vonBeispielcode zum Festlegen der Mehrfeldsortierung für das mehrdimensionale PHP-Array_php-Beispiel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
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!