3.2. 数组排序
持之以恒,方得始终!
sort()
将数组元素按字母升序排序,键名会重置掉。
$products = ['tires', 'oil', 'spark'];
sort($products);
还可以按数字顺序升序排序
$prices = [100, 10, 4];
sort($prices);
注意,sort() 是区分字母大小写的,大写字母在小写字母前面,即 A 小于 Z , Z 小于 a
$arr = ['a', 'B', 'c', 'D'];
sort($arr);
print_r($arr);
/* Array
(
[0] => B
[1] => D
[2] => a
[3] => c
) */
该函数的第二个参数有:
- SORT_REGULAR (默认) 正常比较单元
- SORT_NUMERIC 单元被作为数字来比较
- SORT_STRING 单元被作为字符串来比较
比如,比较数值2
,和字符串'12'
, 数字是2 < 12
, 按字符串来说'12' < '2'
asort()
按值升序排序,保持键名不变
$arr = ['tires' => 100, 'oil' => 10, 'spark' => 4];
asort($arr);
print_r($arr);
/* Array
(
[spark] => 4
[oil] => 10
[tires] => 100
) */
ksort()
按键名升序排序,保持值不变
$arr = ['tires' => 100, 'oil' => 10, 'spark' => 4];
ksort($arr);
print_r($arr);
/* Array
(
[oil] => 10
[spark] => 4
[tires] => 100
) */
倒序
前面的 sort(), asort(), ksort()
都是升序,它们都有对应的倒序函数 rsort(), arsort(), krsort()
多维数组排序
对于数值,字符串,php知道怎么排序,但是php无法知道怎么比较两个数组,因此我们需要主动提供一个排序方法。
$products = [
['TIR', 'Tires', 100],
['OIL', 'Oil', 10],
['SPK', 'Spark Plugs', 4]
];
对产品说明按字母升序排序
function compare($x, $y) {
if($x[1] == $y[1]) {
return 0;
} else if ($x[1] < $y[1]) {
return -1;
} else {
return 1;
}
}
usort($products, 'compare');
按价格升序排序
function compare($x, $y) {
if($x[2] == $y[2]) {
return 0;
} else if($x[2] < $y[2]) {
return -1;
} else {
return 1;
}
}
usort($products, 'compare');
各自对应供二维数组的排序函数,u可以理解user,用户自定义的。
- sort() — usort()
- asort() — uasort()
- ksort() — uksort()
对于倒序排序的,我们改动一下自定义的函数即可
$products = [
['TIR', 'Tires', 100],
['OIL', 'Oil', 10],
['SPK', 'Spark Plugs', 4]
];
function reverse_compare($x, $y) {
if($x[2] == $y[2]) {
return 0;
} elseif($x[2] < $y[2]) {
return 1; // 哪个在前面,就返回1
} else {
return -1;
}
}
usort($products, 'reverse_compare');
print_r($products);
shuffle() 随机打乱数组元素的排序
$pictures = ['tire.jpg', 'oil.jpg', 'spark_plug.jpg', 'door.jpg', 'steering_wheel.jpg', 'thermostat.jpg'];
shuffle($pictures);
print_r($pictures);
array_reverse()
返回一个与原数组,相反顺序的数组。
比如我们来创建一个 10~1 的数组,有下面几种方式:
- for, array_push
$numbers = []; for($i=10; $i > 0; $i--) { array_push($numbers, $i); // 与之相反的函数array_pop() }
- range(), rsort()
$numbers = range(1, 10); rsort($numbers);
- range(), array_reverse()
$numbers = range(1, 10); $numbers = array_reverse($numbers);
- range()
$numbers = range(10, 1, -1); $numbers = range(10, 1); // 不加-1也是可以的
如有任何侵权行为,请通知我删除,谢谢大家!
个人邮箱:865460609@qq.com