Maison  >  Article  >  développement back-end  >  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

不言
不言original
2018-06-01 10:08:392108parcourir

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

. 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')
  );

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);
  }

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)

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))

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);

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)
      }
    }

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!

Déclaration:
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