Maison > développement back-end > tutoriel php > Exemple de spécification d'un tri multi-champs pour les tableaux multidimensionnels PHP

Exemple de spécification d'un tri multi-champs pour les tableaux multidimensionnels PHP

不言
Libérer: 2023-03-28 21:04:01
original
2153 Les gens l'ont consulté

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 $... ]]] )
Copier après la connexion

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

. Arguments supplémentaires.




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')
  );
Copier après la connexion

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')
  );
Copier après la connexion

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);
  }
Copier après la connexion

Après avoir passé array_multisort, cela équivaut à trier le tableau unidimensionnel $field, et puis selon la clé triée, reconstruisez le tableau entrant à trier.
array(0=>8,1=>9,2=>5)
Copier après la connexion

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 :

Refactorisez le code ci-dessus, comme à condition d'utiliser la fonction func_get_args en php pour obtenir dynamiquement la valeur entrante, ce qui peut résoudre le problème du nombre incertain de champs multiples. La mise en œuvre est la suivante :
  $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))
Copier après la connexion

Les résultats en cours d'exécution sont les suivants :
  $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);
Copier après la connexion

Ce qui précède est l'intégralité du contenu de cet article. Merci d'avoir lu. Veuillez prêter attention au site Web PHP chinois pour plus d'informations !

Recommandations associées :
    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)
      }
    }
Copier après la connexion

Fonction php strftime pour obtenir la date et l'heure (changer d'utilisation)

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal