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') );
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') );
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); }
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 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))
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);
Das laufende Ergebnis ist wie folgt:
[ 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:
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!