Heim > Backend-Entwicklung > PHP-Tutorial > Beispiel für die Angabe der Mehrfeldsortierung für mehrdimensionale PHP-Arrays

Beispiel für die Angabe der Mehrfeldsortierung für mehrdimensionale PHP-Arrays

不言
Freigeben: 2023-03-28 21:04:01
Original
2152 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich Beispiele für die Angabe der Mehrfeldsortierung für mehrdimensionale PHP-Arrays vor. Jetzt kann ich ihn mit Ihnen teilen

Einführung in die Methode array_multisort

array_multisort – Sortieren mehrerer Arrays oder mehrdimensionaler Arrays Die Anweisungen im PHP-Handbuch lauten wie folgt:

Kopieren Sie den Code Der Code lautet wie folgt:

bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] )
Nach dem Login kopieren

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üssen nach dem ID-Wert des konvertierten zweidimensionalen Arrays sortieren Das 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 oben eingeführte Funktion array_multisort wie folgt verwenden:

  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

By Das $field jedes Arrays im sortierten Array wird in einem Ein-Bit-Array fieldArr gespeichert und nimmt an der Sortierung im eingehenden array_multisort teil. Der Wert des Feldarrays lautet wie folgt:

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

Nach der Übergabe von array_multisort entspricht dies dem Sortieren des eindimensionalen Arrays $field und dem anschließenden Neuaufbau Es basiert auf dem sortierten Schlüssel 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 für die 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

Refaktorieren Sie den obigen Code, verwenden Sie einfach PHP Die Funktion func_get_args kann den eingehenden Wert dynamisch abrufen, wodurch das Problem der unsicheren Anzahl mehrerer Felder gelöst werden kann. 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) {
            ["id"]=>int(5)
            ["name"]=>string(3) "Cos"
            ["age"]=>int(16)
          }
      [1]=>array(3) {
            ["id"]=>int(5)
            ["name"]=>string(3) "Cos"
            ["age"]=>int(14)
          }
      [2]=>array(3) {
            ["id"]=>int(8)
            ["name"]=>string(5) "Apple"
            ["age"]=>int(18)
          }
      [3]=>array(3) {
            ["id"]=>int(8)
            ["name"]=>string(3) "Bed"
            ["age"]=>int(17)
      }
    }
Nach dem Login kopieren

Das Obige ist der gesamte Inhalt dieses Artikels, danke Euch zum Lesen. Weitere Informationen finden Sie auf der chinesischen PHP-Website!

Verwandte Empfehlungen:

PHP-Strftime-Funktion zum Abrufen von Datum und Uhrzeit (Umstellung der Nutzung)


PHP-Multitasking-Sekunde -Level-Timer Implementierungsmethode von


Das obige ist der detaillierte Inhalt vonBeispiel für die Angabe der Mehrfeldsortierung für mehrdimensionale PHP-Arrays. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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