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 的数组,有下面几种方式:

  1. for, array_push
    $numbers = [];
    for($i=10; $i > 0; $i--) {
     array_push($numbers, $i); // 与之相反的函数array_pop()
    }
  2. range(), rsort()
    $numbers = range(1, 10);
    rsort($numbers);
  3. range(), array_reverse()
    $numbers = range(1, 10);
    $numbers = array_reverse($numbers);
  4. range()
    $numbers = range(10, 1, -1);
    $numbers = range(10, 1); // 不加-1也是可以的

如有任何侵权行为,请通知我删除,谢谢大家!
个人邮箱:865460609@qq.com

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
Junwind
讨论数量: 0
发起讨论 只看当前版本


暂无话题~