Home  >  Article  >  Backend Development  >  Detailed explanation of PHP array sorting function array_multisort() function

Detailed explanation of PHP array sorting function array_multisort() function

不言
不言Original
2018-04-26 11:34:262390browse

This article introduces the detailed explanation of the PHP array sorting function array_multisort() function. It has a certain reference value. Now I share it with you. Friends in need can refer to the

array_multisort() function. Multiple PHP arrays can be sorted, and the result of the sorting is that all arrays are arranged in the order of the first array - a bit confusing, really, and you won't understand if I just say this. Let’s take an example first:

例如array_multisort($a,$b),$a,$b是两个数组,如果排序之后,$a数组的第3个元
素被排到了第一位,那么$b的第三个元素不管他在$b中的大小都会排在第一位。看看下边
的程序运行结果:

$a =array(100,80,50,10,0);
$b = array("c","f","q","e","z");
array_multisort($a,$b);
var_dump($a);
var_dump($b);

运行结果:
array(5) { [0]=> int(0) [1]=> int(10) [2]=> int(50) [3]=> int(80) [4]=> int(100) }
array(5) { [0]=> string(1) “z” [1]=> string(1) “e” [2]=> string(1) “q” [3]=> string(1) “f” [4]=> string(1) “c” }


其实说明白了就是,array_multisort()先把第一个数组按照键值的大小排序,然后其它
数组都按照第一个数组的调整策略进行调整——第三个元素放到第一位,第二个元素放到第
二位……——其实这个多维数组排序算法的最基本体现!
  • But it should be noted that the number of elements in the two arrays must be the same, otherwise a warning message will appear

First of all, let’s take a look at the method of sorting each element [array] of a multi-dimensional array. It is very simple, but there are several parameters that need to be explained. If you know something about SQL, you will probably understand it at a glance:

//让我们来构造一个多维数组
$a=array(100,2,4,7,7);
$b=array('ab','ac','ad','ag','ap');

$ab = array($a,$b);
//开始排序
array_multisort($ab[0],SORT_NUMERIC,SORT_DESC,$ab[1],SORT_STRING,SORT_ASC);
print_r($ab);

说明一下:首先我们用SORT_NUMERIC来声明对$ab[0]用数字类型排序,用SORT_DESC声
明顺序是逆序(从大到小),然后我们对$ab[1]用字符串类型排序,顺序是升序(顺序)

最后数组$ab的排序结果是两者的结合,先按$ab[0]的逆序,如果$ab[0]中存在大小相同
的数值则按照$ab[1]的顺序排列,输出结果如下:

Array (
    [0] => Array ( [0] => 100 [1] => 7 [2] => 7 [3] => 4 [4] => 2 )
    [1] => Array ( [0] => ab [1] => ag [2] => ap [3] => ad [4] => ac )
)

Now let’s look at an example that is closer to practical application:

$array[] = array("age"=>20,"name"=>"li");
$array[] = array("age"=>21,"name"=>"ai");
$array[] = array("age"=>20,"name"=>"ci");
$array[] = array("age"=>22,"name"=>"di");

foreach ($array as $key=>$value){
     $age[$key] = $value['age'];
     $name[$key] = $value['name'];
}

array_multisort($age,SORT_NUMERIC,SORT_DESC,$name,SORT_STRING,SORT_ASC,$array);
print_r($array);

The $array[] array in this example is constructed based on the records read from the database. We now use them Sort by age from oldest to youngest, if they are the same age, sort by name. This kind of sorting is what we will often use in the future

Because the sorting parameter required by array_multisort() must be a column, so we use foreach to read out the age and name of this array. What happens next?

就像上边的例子一样,进行排序,最后一个参数$array想必大家也看见了,是的这里需要
声明对哪个数组进行排序,因为我们前边两个参数在形式上已经和需要排序的PHP数组没有
关系了,虽然其实他们就是$array中的数据——我们从$array中抽取的列——排序当然是需
要列,还没见过用行数据进行排序的呢!

The output result is as follows - just as we thought:

Array (
    [0] => Array ( [age] => 22 [name] => di )
    [1] => Array ( [age] => 21 [name] => ai )
    [2] => Array ( [age] => 20 [name] => ci )
    [3] => Array ( [age] => 20 [name] => li )
)

See it, it is actually very simple, it’s just that the few parameters that need to be capitalized are a bit annoying! Although it is a bit difficult to understand, it will be great if you understand it. It will be very useful in the future!

array_multisort(array1,sorting order,sorting type,array2,array3…)

  • sorting order Optional. Specify the order of sorting. Possible values:

    SORT_ASC - Default. Sort in ascending order (A-Z).
    SORT_DESC - Sort in descending order (Z-A).

  • sorting type Optional. Specifies the sorting type. Possible values:

    SORT_REGULAR - Default. Put each item in regular order (Standard ASCII, don't change the type).
    SORT_NUMERIC - Treat each item as a number.
    SORT_STRING - Treat each item as a string.
    SORT_LOCALE_STRING - Treat each item as a string, based on the current locale (can be changed via setlocale()).
    SORT_NATURAL - Treat each item as a string, using natural sorting like natsort().
    SORT_FLAG_CASE - Can be combined (bitwise ORed) with SORT_STRING or SORT_NATURAL to sort strings, case-insensitively.

Related recommendations:

php array sort usort uksort sort function


The above is the detailed content of Detailed explanation of PHP array sorting function array_multisort() function. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn