Home  >  Article  >  Backend Development  >  Summary of some PHP array sorting function examples_PHP tutorial

Summary of some PHP array sorting function examples_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 17:00:27859browse

There are many functions that can be used to sort arrays in php. If it is a simple one-dimensional array sort, we can use the sorting function that comes with php, but for multi-dimensional arrays, we need to write it ourselves.


I have been worried since I came back, so I looked up the book and found the answer. In order to remember them, I decided to make a summary of array sorting functions.


The first thing I came into contact with was the problem of PHP array sorting and descending order.

sort: This function assigns new key names to the cells in the array. This will delete the original keys rather than just reorder them.
rsort: This function sorts the array in reverse order (highest to lowest). Delete the original key names instead of just reordering them.
asort: Sort the array and maintain the index relationship
arsort: Sort the array in reverse and maintain the index relationship

ksort: Sort the array by key name and retain the association between key name and data
krsort: Sort the array in reverse order by key name, retaining the association between key name and data

natsort: Sort alphanumeric strings while maintaining original key/value associations
natcasesort: Same as natsort sorting algorithm, but case-insensitive sorting


PHP array sort (sort)
Numeric index array sorting:
Function: sort(array, [sort type])
Description: The sort() function sorts the specified array (first parameter) in ascending order.
The second parameter of the sort function is used to specify the sorting type and is an optional parameter. The possible values ​​are:
SORT_REGULAR: Default value, sort without changing the type;
SORT_NUMERIC: Sort values ​​as numbers;
SORT_STRING: Sort values ​​as strings;
For example, if there are 4 and "37" in the array, if you sort by numbers, 4 is less than "37"; if you sort by strings, 4 is greater than "37";


1. One-dimensional array

Suppose there is a one-dimensional array, as follows:


$sortArr = array("name"=>"hiro", "age"=>"23", "city"=>"Shanghai", "code"=>"200051");
The original array result output by print_r() is:


Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )

1.sort() function: sort in ascending order according to the array subscript;
The array result output by print_r() is (only the array subscript is output, not the key name):

1
Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )

2.rsort() function: Contrary to the sort() function, sort in descending order according to the array subscript;
The array result output by print_r() is (only the array subscript is output, not the key name):


Array ( [0] => hiro [1] => Shanghai [2] => 200051 [3] => 23 )

3.asort() function: Sort in ascending order according to the key name of the array;
The array result output by print_r() is:

1
Array ( [age] => 23 [code] => 200051 [city] => Shanghai [name] => hiro )

4.arsort() function: Contrary to the asort() function, it sorts in descending order according to the key name of the array;
The array result output by print_r() is:


Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

5.ksort() function: Sort in ascending order according to the key value of the array;
The array result output by print_r() is:


Array ( [age] => 23 [city] => Shanghai [code] => 200051 [name] => hiro )

6.krsort() function: Contrary to the ksort() function, it sorts in descending order according to the key values ​​of the array;
The array result output by print_r() is:

The code is as follows Copy code
 代码如下 复制代码


 Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

Array ( [name] => hiro [city] => Shanghai [code] => 200051 [age] => 23 )

7.reverse_array() function: reverse the current array order;

The array result output by print_r() is:

 代码如下 复制代码
 Array ( [name] => hiro [age] => 23 [city] => Shanghai [code] => 200051 )

8.shuffle() function: Arrange the array order randomly (the order is different after each refresh);
The array result output by print_r() is (just one of the random arrangements):


Array ( [0] => 23 [1] => 200051 [2] => Shanghai [3] => hiro )

2. Two-dimensional array
Suppose there is a two-dimensional array as follows:

The code is as follows Copy code
 代码如下 复制代码

 $person = array(
 array("hiro", "23", "suzhou"),
 array("yoyo", "25", "shanghai"),
 array("janstar", "28", "xinjiang")
);
print_r()输出的原始数组结果为:

1
 Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) )

$person = array(

array("hiro", "23", "suzhou"),

array("yoyo", "25", "shanghai"),

array("janstar", "28", "xinjiang")

);
 代码如下 复制代码

function compare0($x, $y) {
 if($x[0] == $t[0]) {
  return 0;
 } elseif ($x[0] < $y[0]) {
return -1;
} else {
return 1;
}
}

usort($person, compare0);
echo "按第一个元素正向排序:";
print_r($person);
输出的结果如下:

1
按第一个元素正向排序:Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) )

The original array result output by print_r() is:

1
 代码如下 复制代码

function compare2($x, $y) {
 if($x[2] == $t[2]) {
  return 0;
 } elseif ($x[2] < $y[2]) {
return -1;
} else {
return 1;
}
}

usort($person, compare2);
echo "按第三个元素正向排序:";
print_r($person);
输出的结果如下:


按第三个元素正向排序:Array ( [0] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) )

Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) )

The sorting of two-dimensional arrays is based on the key name of each dimension, so an additional comparison function needs to be written. Let’s give three examples:
 代码如下 复制代码
function reverse_compare2($x, $y) {
 if($x[2] == $t[2]) {
  return 0;
 } elseif ($x[2] < $y[2]) {
return 1; //改变后即可反向
} else {
return -1; //改变后即可反向
}
}

usort($person, reverse_compare2);
<🎜>1. Sort by the first element of each dimension in ascending order, the code is as follows: <🎜>
The code is as follows Copy code
<🎜>function compare0($x, $y) {<🎜> if($x[0] == $t[0]) {<🎜> Return 0;<🎜> } elseif ($x[0] < $y[0]) {<🎜> Return -1;<🎜> } else {<🎜> Return 1;<🎜> }<🎜> }<🎜> <🎜> usort($person, compare0);<🎜> echo "Sort forward by the first element:";<🎜> print_r($person); <🎜> The output results are as follows: <🎜> <🎜>1<🎜> Sort forward by the first element: Array ( [0] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [1] => Array ( [ 0] => janstar [1] => 28 [2] => xinjiang ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) )
2. Sort by the third element of each dimension in ascending order, the code is as follows:
The code is as follows Copy code
function compare2($x, $y) { if($x[2] == $t[2]) { Return 0; } elseif ($x[2] < $y[2]) {<🎜> Return -1;<🎜> } else {<🎜> Return 1;<🎜> }<🎜> }<🎜> <🎜> usort($person, compare2);<🎜> echo "Sort forward by the third element:";<🎜> print_r($person); <🎜> The output results are as follows: <🎜> <🎜><🎜> Sort forward by the third element: Array ( [0] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) [1] => Array ( [ 0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) )
3. Sort by the third element of each dimension in ascending order, the code is as follows:
The code is as follows Copy code
function reverse_compare2($x, $y) { if($x[2] == $t[2]) { return 0; } elseif ($x[2] < $y[2]) {<🎜> Return 1; //You can reverse it after changing it<🎜> } else {<🎜> Return -1; //Reverse after changing<🎜> }<🎜> }<🎜> <🎜> usort($person, reverse_compare2);<🎜>

echo "Sort by the third element in reverse order:";
print_r($person);
The output results are as follows:

1
Sort in reverse order by the third element:

代码如下 复制代码
Array ( [0] => Array ( [0] => janstar [1] => 28 [2] => xinjiang ) [1] => Array ( [0] => hiro [1] => 23 [2] => suzhou ) [2] => Array ( [0] => yoyo [1] => 25 [2] => shanghai ) )

Haha, there are too many codes, please write them down for easy reference later!

Example

The code is as follows
 代码如下 复制代码

error_reporting(0);

/**
* @数字数组排序 可按从大到小或从小到大排序
*/
function sortArray($array, $choice) {
$values = array_values($array); // 建立一个数字索引的数组
$ch = $choice==0 ? min:max; // 参数$choice为0按从小到大排列,否则其他都默认为按从大到小
do {
$val = $ch($values); // 找出最大或最小值
$key = array_search($val,$values); // 取得最大值的键名
$result[$key] = $val; // 将最大值存入新数组
unset($values[$key]);
} while (count($values) > 0);
    return $result;
}

$array = array(100, 1000, 1, 10000);
//$array = sortArray($array, 0);
$array = sortArray($array, 1);
foreach($array as $a) {
    echo "$a ";
}
?>

Copy code
error_reporting(0);

/***/ function sortArray($array, $choice) { $values ​​= array_values($array); // Create a numerically indexed array $ch = $choice==0 ? min:max; // If the parameter $choice is 0, the order is from small to large, otherwise the others will be arranged from large to small by default do {            $val = $ch($values); // Find the maximum or minimum value           $key = array_search($val,$values); // Get the key name with the maximum value           $result[$key] = $val; // Store the maximum value in the new array           unset($values[$key]); } while (count($values) > 0); Return $result; } $array = array(100, 1000, 1, 10000);
//$array = sortArray($array, 0);
$array = sortArray($array, 1); foreach($array as $a) { echo "$a "; } ?> http://www.bkjia.com/PHPjc/631245.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/631245.htmlTechArticleThere are many functions that can be implemented for array sorting in php. If it is a simple one-dimensional array sorting, we can use php It comes with a sorting function, but for multi-dimensional arrays we need to write it ourselves. ...
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