The use of PHP Array_multisort () function notes _php tips

Source: Internet
Author: User
Tags lowercase mixed
function bool Array_multisort (array & $arr [, Mixed $arg = Sort_asc [, Mixed $arg = Sort_regular [, mixed $ ...]])
Parameter description: function to sort multiple arrays or multidimensional arrays
The first argument is an array, and each subsequent argument may be an array, or it may be the following sort order flag
SORT_ASC-Default, in ascending order
Sort_desc-In descending order
You can then specify the sort type
Sort_regular-Default. Arranges each item in a regular order.
Sort_numeric-Arranges each item in numerical order.
Sort_string-Arranges each entry in alphabetical order.
Instance Code
Copy Code code as follows:

$arr 1 = Array (' Ten ', one, one,,, ' a ');
$arr 2 = Array (1, 2, 3, ' 2 ', 5);
Array_multisort ($arr 1, $arr 2);

The results are:
$arr 1
Array ([0] => [1] => a [2] => [3] => [4] => 100)
# ' 10 ' is converted to an integer 10 when compared with 11, 100, 100, and less than the other three numbers
# ' 10 ' is a ' a ' comparison as a string whose first character ' 1 ' has an ASCII code value of 49 less than ' a ' (ASCII value 97), so ' 10 ' is the smallest element
# ' A ' is converted to an integer 0, less than three other numbers when the other three digits are compared
$arr 2
Array ([0] => 1 [1] => 5 [2] => 2 [3] => 2 [4] => 3)
# $arr 2 element 1 corresponds to the $ARR1 element ' 10 ' position, so it's positioned at [0]
# $arr 1[2] =>, $arr 1[3] => 100 correspond to $ARR2 elements 3, ' 2 ' respectively. 3 is greater than ' 2 ', so the index corresponding to the 2 $arr1[2] => 100 is sorted as
3, with 3 corresponding $arr1[3] => 100 sorted subscript 4
Summarize
1. The number of array elements involved in sorting remains consistent
2. Sort array element position corresponding to, ' Ten ' => 1, one => 2
3. The array is sorted based on the order of the preceding array
4. The preceding array, when equal elements are compared, compares the rear array

array_multisort-to sort multiple arrays or multidimensional arrays

Description
BOOL Array_multisort (array $ar 1 [, Mixed $arg [, mixed $ ... [, Array $ ...]]] )
Returns TRUE on success or FALSE on failure.

Array_multisort () can be used to sort multiple arrays at once, or to sort multidimensional arrays based on one dimension or multidimensional.

The association (string) key name remains unchanged, but the numeric key name is indexed.

The input array is treated as a column of a table and sorted in rows--this is similar to the function of the SQL ORDER BY clause. The first array is the primary array to sort. The rows (values) in the array are the same, sorted by the size of the corresponding values in the next input array, and so on.

The parameter structure of this function is somewhat unusual, but very flexible. The first argument must be an array. Each of the next parameters can be an array or a sort flag listed below.

Sort order Flags:

Sort_asc-Sort by ascending order
Sort_desc-Sort in descending order

Sort Type Flags:

Sort_regular-Compare items in the usual way
Sort_numeric-Compare items by numerical comparison
Sort_string-Comparing items by string

You cannot specify two similar sort flags after each array. The sort flags specified after each array are valid only for the array-the default values SORT_ASC and Sort_regular before that.

#1 to sort multiple arrays
Copy Code code as follows:

<?php
$ar 1 = Array ("a");
$ar 2 = Array (1, 3, "2", 1);
Array_multisort ($ar 1, $ar 2);
Var_dump ($ar 1);
Var_dump ($ar 2);
?>

After sorting in this example, the first array will contain "ten", "a", 100,100. The second array will contain 1, 1, "2", and 3. The sequence of items in the second array is exactly the same as the corresponding items in the first array (100 and 100).
Copy Code code as follows:

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

To sort multidimensional arrays #2
Copy Code code as follows:

<?php
$ar = Array ("Ten", "N", "a"), Array (1, 3, "2", 1));
Array_multisort ($ar [0], SORT_ASC, sort_string,
$ar [1], sort_numeric, SORT_DESC);
?>

After sorting in this example, the first array will contain 10,100,100, "a" (sorted as String ascent), and the second array will contain 1, 3, "2", and 1 (sorted as numeric drop).

#3 sorting multi-dimensional array
Copy Code code as follows:

<?php
$ar = Array (
Array ("A", "one, One,", "a"),
Array (1, 2, "2", 3, 1)
);
Array_multisort ($ar [0], SORT_ASC, sort_string,
$ar [1], sort_numeric, SORT_DESC);
Var_dump ($ar);
?>

In this example, after sorting, the first array becomes "Ten", 100,100,11, and "a" (sorted in ascending order as a string). The second array will contain 1, 3, "2", 2, 1 (sorted as numbers in descending order).
Copy Code code as follows:

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 sort the results of a database
In this example, each cell in the data array represents a row in a table. This is a typical collection of data for database records.

The data in the example are as follows:

Volume | Edition
-------+--------
67 | 2
86 | 1
85 | 6
98 | 2
86 | 6
67 | 7

The data is all stored in an array named data. This is usually achieved by looping through the database, such as MYSQL_FETCH_ASSOC ().

<?php
$data [] = Array (' volume ' =>, ' Edition ' => 2);
$data [] = Array (' volume ' =>, ' edition ' => 1);
$data [] = Array (' volume ' =>, ' Edition ' => 6);
$data [] = Array (' volume ' =>, ' Edition ' => 2);
$data [] = Array (' volume ' =>, ' Edition ' => 6);
$data [] = Array (' volume ' =>, ' edition ' => 7);
?>
In this example, the volume is sorted in descending order and the edition in ascending order.

Now you have an array with rows, but Array_multisort () needs an array of columns, so use the following code to get the columns, and then sort.

<?php
Get a list of columns
foreach ($data as $key => $row) {
$volume [$key] = $row [' volume '];
$edition [$key] = $row [' Edition '];
}

Arranges data in descending order according to volume, sorted by edition ascending order
Sort the $data as the last parameter in a common key
Array_multisort ($volume, Sort_desc, $edition, SORT_ASC, $data);
?>
The data collection is now sorted, and the results are as follows:

Volume | Edition
-------+--------
98 | 2
86 | 1
86 | 6
85 | 6
67 | 2
67 | 7


Example #5 case-insensitive alphabetic sorting

Both sort_string and Sort_regular are case-sensitive and uppercase letters precede lowercase letters.

To do a case-insensitive sort, sort by the lowercase letter copy of the original array.
Copy Code code as follows:

<?php
$array = Array (' Alpha ', ' Atomic ', ' Beta ', ' Bank ');
$array _lowercase = Array_map (' Strtolower ', $array);

Array_multisort ($array _lowercase, SORT_ASC, sort_string, $array);

Print_r ($array);
?>

The above routines will output:

Array
(
[0] => Alpha
[1] => Atomic
[2] => Bank
[3] => Beta
)

"Translator Note" This function is quite useful, to help understand, please look at the following example:


Example #6 Rank
Copy Code code as follows:

<?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,
Sort fractions as numeric values, from high to low
$grade ["Name"], sort_string, SORT_ASC);
Sort names as strings, from small to large
Var_dump ($grade);
?>

The above routines will output:

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"
}
}
In this case, the array containing the scores $grade sorted by score (score) from high to low, and those with the same score are sorted by first name (names) from small to large. After the sort Lee 495 is divided into the first place, Zhao 660 is divided into fifth place without objection. John, Harry and Liu Qi are 70 points, and their rankings are arranged alphabetically by their names, Liu in front of Wang and Zhang at the end. For the sake of distinction, three 70 points are represented by integers, floating-point numbers, and strings, which can be clearly seen in the program output as a result of their ordering.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.