Maison  >  Article  >  développement back-end  >  Notes sur l'utilisation de la fonction PHP array_multisort()

Notes sur l'utilisation de la fonction PHP array_multisort()

高洛峰
高洛峰original
2017-01-06 16:55:301220parcourir

Fonction bool array_multisort (array &$arr [, Mixed $arg = SORT_ASC [, Mixed $arg = SORT_REGULAR [, Mixed $...]]] )
Description du paramètre : La fonction trie plusieurs tableaux ou tableaux multidimensionnels Trier
Le premier paramètre est un tableau, chaque paramètre suivant peut être un tableau, ou l'indicateur d'ordre de tri suivant
SORT_ASC - Par défaut, trier par ordre croissant
SORT_DESC - Trier par ordre décroissant
Vous pouvez puis spécifiez le type de tri
SORT_REGULAR - la valeur par défaut. Disposez chaque élément dans un ordre régulier.
SORT_NUMERIC - Triez chaque élément par ordre numérique.
SORT_STRING - Triez chaque élément par ordre alphabétique.
Exemple de code

$arr1 = array('10', 11, 100, 100, 'a'); 
$arr2 = array(1, 2, 3, '2', 5); 
array_multisort($arr1, $arr2);

Le résultat est :
$arr1
Array ( [0] => 10 [1] => a [2] => 11 [ 3 ] => 100 [4] => 100 )
# '10' est converti en un entier 10 par rapport à 11, 100, 100, qui est plus petit que les trois autres nombres
# '10 ' se trouve dans 'a' Lorsqu'il est comparé à une chaîne, le premier caractère '1' a une valeur de code ascii de 49 qui est inférieure à 'a' (la valeur ascii est 97), donc '10' est le plus petit élément
# 'a' réside dans la comparaison des trois autres nombres Quand , il est converti en un entier 0, qui est inférieur aux trois autres nombres
$arr2
Array ( [0] => 1 [ 1] => 5 [2] => 2 [3] => 2 [4] => 3 )
# L'élément $arr2 1 correspond à la position '10' de l'élément $arr1, il est donc classé à la position [0]
# $arr1[2] => 100, $arr1[ 3] => 100 correspond respectivement aux éléments $arr2 3 et '2'. 3 est supérieur à « 2 », donc l'indice trié de $arr1[2] => 100 correspondant à 2 est
3, et l'indice trié de $arr1[3] => 100 correspondant à 3 est 4
Résumé
1. Le nombre d'éléments du tableau participant au tri reste le même
2 Les positions des éléments du tableau triés correspondent par exemple à '10' => 1 , 11 => 2 3. Les tableaux suivants Trient en fonction de l'ordre du tableau précédent
4. Si le tableau précédent rencontre des éléments égaux, comparez le tableau suivant

array_multisort — Triez plusieurs tableaux ou tableaux multidimensionnels
Description
bool array_multisort ( array $ar1 [, Mixed $arg [, Mixed $... [, array $... ]]] )
Renvoie TRUE en cas de succès ou renvoie FALSE en cas d'échec .

array_multisort() peut être utilisé pour trier plusieurs tableaux à la fois, ou pour trier des tableaux multidimensionnels selon une ou plusieurs dimensions.

Le nom de la clé (chaîne) associée reste inchangé, mais le nom de la clé numérique sera réindexé.

Le tableau d'entrée est traité comme une colonne de table et trié par ligne - ceci est similaire à la fonctionnalité de la clause ORDER BY de SQL. Le premier tableau est le tableau principal à trier. Si les lignes (valeurs) du tableau sont comparées comme étant identiques, elles sont triées en fonction de la taille de la valeur correspondante dans le tableau d'entrée suivant, et ainsi de suite.

La structure des paramètres de cette fonction est quelque peu inhabituelle, mais très flexible. Le premier paramètre doit être un tableau. Chacun des arguments suivants peut être un tableau ou un indicateur de tri répertorié ci-dessous.

Drapeau d'ordre de tri :

SORT_ASC - Trier par ordre croissant
SORT_DESC - Trier par ordre décroissant

Drapeau de type de tri :

SORT_REGULAR - Trier par ordre décroissant Les éléments sont comparés selon la méthode habituelle
SORT_NUMERIC - les éléments sont comparés selon des valeurs numériques
SORT_STRING - les éléments sont comparés selon des chaînes

Deux indicateurs de tri similaires ne peuvent pas être spécifiés après chaque tableau. Les indicateurs de tri spécifiés après chaque tableau ne sont valables que pour ce tableau - avant cela, les valeurs par défaut SORT_ASC et SORT_REGULAR.

#1 Trier plusieurs tableaux

Après le tri dans cet exemple, le premier tableau contiendra "10", "a", 100, 100. Le deuxième tableau contiendra 1,1,"2",3. L'ordre des éléments dans le deuxième tableau est exactement le même que l'ordre des éléments correspondants (100 et 100) dans le premier tableau.
<?php 
$ar1 = array("10", 100, 100, "a"); 
$ar2 = array(1, 3, "2", 1); 
array_multisort($ar1, $ar2); 
var_dump($ar1); 
var_dump($ar2); 
?>

#2 Trier les tableaux multidimensionnels
array(4) { 
[0]=> string(2) "10" 
[1]=> string(1) "a" 
[2]=> int(100) 
[3]=> int(100) 
} 
array(4) { 
[0]=> int(1) 
[1]=> int(1) 
[2]=> string(1) "2" 
[3]=> int(3) 
}

Après le tri dans cet exemple, le premier tableau contiendra 10, 100, 100, "a" (sous forme de chaîne Sorted croissant), le deuxième tableau contiendra 1, 3, "2", 1 (trié par ordre numérique décroissant).
<?php 
$ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1)); 
array_multisort ($ar[0], SORT_ASC, SORT_STRING, 
$ar[1], SORT_NUMERIC, SORT_DESC); 
?>

#3 Tri d'un tableau multidimensionnel

Dans cet exemple, après tri, le premier tableau deviendra "10", 100, 100, 11, "a" ( traité comme chaînes par ordre croissant). Le deuxième tableau contiendra 1, 3, "2", 2, 1 (traités comme des nombres par ordre décroissant).
<?php 
$ar = array( 
array("10", 11, 100, 100, "a"), 
array( 1, 2, "2", 3, 1) 
); 
array_multisort($ar[0], SORT_ASC, SORT_STRING, 
$ar[1], SORT_NUMERIC, SORT_DESC); 
var_dump($ar); 
?>
array(2) { 
[0]=> array(5) { 
[0]=> string(2) "10" 
[1]=> int(100) 
[2]=> int(100) 
[3]=> int(11) 
[4]=> string(1) "a" 
} 
[1]=> array(5) { 
[0]=> int(1) 
[1]=> int(3) 
[2]=> string(1) "2" 
[3]=> int(2) 
[4]=> int(1) 
} 
}

#4 对数据库结果进行排序 
本例中 data 数组中的每个单元表示一个表中的一行。这是典型的数据库记录的数据集合。 

例子中的数据如下: 

volume | edition 
-------+-------- 
67 | 2 
86 | 1 
85 | 6 
98 | 2 
86 | 6 
67 | 7 

数据全都存放在名为 data 的数组中。这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc()。 

6bfac01835ebc2082899a02991ee720f 67, 'edition' => 2); 
$data[] = array('volume' => 86, 'edition' => 1); 
$data[] = array('volume' => 85, 'edition' => 6); 
$data[] = array('volume' => 98, 'edition' => 2); 
$data[] = array('volume' => 86, 'edition' => 6); 
$data[] = array('volume' => 67, 'edition' => 7); 
?> 
本例中将把 volume 降序排列,把 edition 升序排列。 

现在有了包含有行的数组,但是 array_multisort() 需要一个包含列的数组,因此用以下代码来取得列,然后排序。 

1e59e18f09b8be1c5b40ba337a1ffdae $row) { 
$volume[$key] = $row['volume']; 
$edition[$key] = $row['edition']; 


// 将数据根据 volume 降序排列,根据 edition 升序排列 
// 把 $data 作为最后一个参数,以通用键排序 
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data); 
?> 
数据集合现在排好序了,结果如下: 

volume | edition 
-------+-------- 
98 | 2 
86 | 1 
86 | 6 
85 | 6 
67 | 2 
67 | 7 


Example #5 不区分大小写字母排序 

SORT_STRING 和 SORT_REGULAR 都是区分大小写字母的,大写字母会排在小写字母之前。 

要进行不区分大小写的排序,就要按照原数组的小写字母拷贝来排序。 

<?php 
$array = array(&#39;Alpha&#39;, &#39;atomic&#39;, &#39;Beta&#39;, &#39;bank&#39;); 
$array_lowercase = array_map(&#39;strtolower&#39;, $array); 

array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array); 

print_r($array); 
?>

以上例程会输出: 

Array 

[0] => Alpha 
[1] => atomic 
[2] => bank 
[3] => Beta 


【译者注】本函数相当有用,为有助于理解,请再看下面这个例子: 


Example #6 名次排列 

<?php 
$grade = array("score" => array(70, 95, 70.0, 60, "70"), 
"name" => array("Zhang San", "Li Si", "Wang Wu", 
"Zhao Liu", "Liu Qi")); 
array_multisort($grade["score"], SORT_NUMERIC, SORT_DESC, 
// 将分数作为数值,由高到低排序 
$grade["name"], SORT_STRING, SORT_ASC); 
// 将名字作为字符串,由小到大排序 
var_dump($grade); 
?>

以上例程会输出: 

array(2) { 
["score"]=> 
array(5) { 
[0]=> 
int(95) 
[1]=> 
string(2) "70" 
[2]=> 
float(70) 
[3]=> 
int(70) 
[4]=> 
int(60) 

["name"]=> 
array(5) { 
[0]=> 
string(5) "Li Si" 
[1]=> 
string(6) "Liu Qi" 
[2]=> 
string(7) "Wang Wu" 
[3]=> 
string(9) "Zhang San" 
[4]=> 
string(8) "Zhao Liu" 


本例中对包含成绩的数组 $grade 按照分数(score)由高到低进行排序,分数相同的人则按照名字(name)由小到大排序。排序后李四 95 分为第一名,赵六 60 分为第五名没有异议。张三、王五和刘七都是 70 分,他们的名次则由其姓名的字母顺序排列,Liu 在前,Wang 在后而 Zhang 在最后。为了区别,三个 70 分分别用了整数,浮点数和字符串来表示,可以在程序输出中清楚地看到它们排序的结果。

更多PHP array_multisort()函数的使用札记相关文章请关注PHP中文网!

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