PHP instructions for using array_multisort multidimensional array sorting_PHP tutorial

WBOY
Release: 2016-07-21 15:33:07
Original
809 people have browsed it

1. Let’s look at the simplest situation first. There are two arrays:

Copy code The code is as follows:

$arr1 = array(1,9,5 );
$arr2 = array(6,2,4);
array_multisort($arr1,$arr2);
print_r($arr1); // The resulting order is 1,5,9
print_r($arr2); // The obtained order is 6,4,2

I estimate that the values ​​​​of the two arrays are corresponding from beginning to end: 1 corresponds to 6, 9 corresponds to 2, 5 corresponds to 4.
Let’s add one more array and see what happens:
Copy the code The code is as follows:

$arr1 = array (1,9,5);
$arr2 = array(6,2,4);
$arr3 = array(3,7,8);
array_multisort($arr1,$arr2,$ arr3);

Looking at the results, 1 corresponds to 6 and 3 from beginning to end, and the same is true for other items. This correspondence is what the manual calls "preserving the original key name association during sorting".
Also, you can also think of each array as a column in a database table. The corresponding 1,6,3 are one data row, and 9,2,7 are another data row. . .
array_multisort will sort by the first array (imagine as a column) first, and if the values ​​of the first array (column) are the same, it will be sorted by the second array (column).
You can use the following program to test:
Copy the code The code is as follows:

$arr1 = array(1 ,9,5,9);
$arr2 = array(6,2,4,1);
$arr3 = array(3,7,8,0);
array_multisort($arr1, $arr2,$arr3);

You can imagine that the result of $arr3 here is (3,8,0,7).
2. Next, we will explain the parameters of array_multisort. The parameters of this function are very flexible. The simplest case is to use 1 or n arrays as parameters as shown above. It should be noted that the number of items in each array must be the same, otherwise a warning will cause the sorting to fail.
Like this array_multisort($arr1,$arr2,$arr3); The default is that all arrays are sorted in ascending order. If you want to sort $arr2 in descending order and compare it as a string, you need to write:
array_multisort( $arr1, $arr2, SORT_DESC, SORT_STRING, $arr3);
Each array can be followed by a sort order flag or a sort type flag, or both flags may appear at the same time. But only one sort flag of each type can appear after each array.
Details are as follows:
Sort order flag:

SORT_ASC - Sort in ascending order (default)
SORT_DESC - Sort in descending order

Sort type flag:

SORT_REGULAR - compare items according to the usual method (default)
SORT_NUMERIC - compare items according to numerical values ​​
SORT_STRING - compare items according to strings

3. Finally, array_multisort has What practical effect.
We usually have some multi-dimensional arrays that need to be sorted:
$guys = Array
(
[0] => Array
(
[name] => jake
[score] => 80
[grade] => A
)
[1] => Array
(
[name] => jin
[score] => 70
[grade] => A
)
[2] => Array
(
[name] => john
[ score] => 80
[grade] => A
)
[3] => Array
(
[name] => ben
[score] => 20
[grade] => B
)
)
For example, we want to sort by grades in reverse order, and if the grades are the same, sort by name in ascending order. At this time we need to create two more arrays according to the order of $guys: $scores = array(80,70,80,20);$names = array('jake','jin','john','ben ');Then array_multisort($scores, SORT_DESC, $names, $guys); That's it. Can it be more flexible? Do I have to get some additional arrays every time I want to sort? In fact, it has been well encapsulated in the helper_array class of qeephp. Here are its two methods. Those who need it can modify it themselves:
Copy code The code is as follows:

/**
* 根据指定的键对数组排序
*
* 用法:
* @code php
* $rows = array(
* array('id' => 1, 'value' => '1-1', 'parent' => 1),
* array('id' => 2, 'value' => '2-1', 'parent' => 1),
* array('id' => 3, 'value' => '3-1', 'parent' => 1),
* array('id' => 4, 'value' => '4-1', 'parent' => 2),
* array('id' => 5, 'value' => '5-1', 'parent' => 2),
* array('id' => 6, 'value' => '6-1', 'parent' => 3),
* );
*
* $rows = Helper_Array::sortByCol($rows, 'id', SORT_DESC);
* dump($rows);
* // 输出结果为:
* // array(
* // array('id' => 6, 'value' => '6-1', 'parent' => 3),
* // array('id' => 5, 'value' => '5-1', 'parent' => 2),
* // array('id' => 4, 'value' => '4-1', 'parent' => 2),
* // array('id' => 3, 'value' => '3-1', 'parent' => 1),
* // array('id' => 2, 'value' => '2-1', 'parent' => 1),
* // array('id' => 1, 'value' => '1-1', 'parent' => 1),
* // )
* @endcode
*
* @param array $array 要排序的数组
* @param string $keyname 排序的键
* @param int $dir 排序方向
*
* @return array 排序后的数组
*/
static function sortByCol($array, $keyname, $dir = SORT_ASC)
{
return self::sortByMultiCols($array, array( $keyname => $dir));
} /**
* Sort a two-dimensional array by multiple columns, similar to ORDER BY in SQL statement
*
* Usage:
* @code php
* $rows = Helper_Array:: sortByMultiCols($rows, array(
* 'parent' => SORT_ASC,
* 'name' => SORT_DESC,
* ));
* @endcode
*
* @param array $rowset Array to be sorted
* @param array $args Key to sort
*
* @return array Sorted array
*/
static function sortByMultiCols($rowset, $args)
{
$sortArray = array();
$sortRule = '';
foreach ($args as $sortField => $sortDir)
{
foreach ($rowset as $offset => $row)
{
$sortArray[$sortField][$offset] = $row[$sortField];
}
$sortRule .= '$sortArray['' . $sortField . ''], ' . $sortDir . ' , ';
}
if (empty($sortArray) || empty($sortRule)) { return $rowset; }
eval('array_multisort(' . $sortRule . '$rowset);' );
return $rowset;
}

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/322693.htmlTechArticle1. Let’s look at the simplest case first. There are two arrays: Copy code The code is as follows: $arr1 = array(1,9,5); $arr2 = array(6,2,4); array_multisort($arr1,$arr2); print_r($arr1); / / Got it right...
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template