Cet article présente principalement des exemples de spécification de tri multi-champs pour les tableaux multidimensionnels PHP. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer. >Présentation de la méthode array_multisort
array_multisort — Trier plusieurs tableaux ou tableaux multidimensionnels Les instructions du manuel PHP sont les suivantes :
Copiez le code Le code est le suivant :
Paramètres
bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] )
arr Un tableau à trier.
arg
Chacun des arguments suivants peut être un autre tableau ou un paramètre d'option d'indicateur de tri pour le tableau précédent : SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING
…
Implémentez d'abord le tri d'un champ du tableau multidimensionnel spécifié
Ici, il est nécessaire de trier le tableau en fonction à l'un des champs. Les hypothèses du tableau sont les suivantes :
Nous voulons trier en fonction de la valeur id du tableau bidimensionnel. Le format du tableau converti est le suivant :$array = array( 0=>array('id'=>8,'name'=>'Tom'), 1=>array('id'=>9,'name'=>'Peter'), 2=>array('id'=>5,'name'=>'Jack') );
Pour terminer la conversion ci-dessus, vous devez utiliser la fonction array_multisort introduite ci-dessus, comme suit :
$array = array( 0=>array('id'=>5,'name'=>'Jack') 1=>array('id'=>8,'name'=>'Tom'), 2=>array('id'=>9,'name'=>'Peter') );
Participer au tri dans le array_multisort entrant en sauvegardant le $field de chaque tableau du tableau à trier dans le tableau d'un bit fieldArr. La valeur du tableau field est la suivante :
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); }
array(0=>8,1=>9,2=>5)
Implémentation du tri de tableaux multidimensionnels en spécifiant plusieurs champs
L'exemple ci-dessus explique comment implémenter le tri de tableaux multidimensionnels en spécifiant un champ, mais si vous le souhaitez Comment penser à spécifier plusieurs champs pour trier un tableau ? Combien de champs y a-t-il ? 2, 3 ou plus, ce facteur incertain doit donc être éliminé.
Regardons d'abord les 2 solutions pour spécifier 2 champs de tri :
$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))
$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);
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) } }
PHP multitâche seconde -level timer Méthode de mise en œuvre de
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!