PHP有下面几个数组排序函数:

arsort, asort, krsort, ksort, rsort, sort, uasort, uksort, usort.

主要做两方面分析:

  • 升序 OR 降序
  • 排序计算规则

升序 OR 降序

除含有字母 u 的排序函数外,带有 r 字母的为 降序,其余为升序.

Q:这里为什么除带有 u字母的函数?
A:因为带有 u 字母的排序函数的排序规则是自定义的,既可以升序也可以降序。

是不是很好记?

排序规则

函数排序规则注意
sort依据数组键值进行升序排序,如果是多维数组则默认取每个子元素的第一个元素进行比较键值对数组排序之后会重置键名,从0开始
rsort同上,只不过是降序排序同上
asort依据数组的键值进行升序排序,如果是多维数组则默认取每个子元素的第一个元素进行比较sort 函数不同的是,该函数不会对键名进行重置
arsort同上,降序同上
ksort依据数组的键名进行升序排序-
krsort同上,降序-
usort依据函数键值进行自定义规则排序排序会重置键名,从0开始
uksort依据函数的键名进行自定义规则排序-
uasort依据函数的键值进行自定义规则排序-

Demo

Q:给定下面的数组,请按照 distance 进行升序排序?

<?php
$stores = [
    [
        'name' => '商家1',
        'distance' => 12,
    ],
    [
        'name' => '商家2',
        'distance' => 3,
    ],
    [
        'name' => '商家3',
        'distance' => 34,
    ],
    [
        'name' => '商家4',
        'distance' => 1,
    ],
    [
        'name' => '商家5',
        'distance' => 19,
    ],
    [
        'name' => '商家6',
        'distance' => 28,
    ],
];

Demo:

<?php
$stores = [
    [
        'name' => '商家1',
        'distance' => 12,
    ],
    [
        'name' => '商家2',
        'distance' => 3,
    ],
    [
        'name' => '商家3',
        'distance' => 34,
    ],
    [
        'name' => '商家4',
        'distance' => 1,
    ],
    [
        'name' => '商家5',
        'distance' => 19,
    ],
    [
        'name' => '商家6',
        'distance' => 28,
    ],
];

usort($stores, function ($a, $b) {
    if ($a['distance'] == $b['distance']) {
        return 0;
    }
    return $a['distance'] > $b['distance'] ? 1 : -1;
});

print_r($stores);

Output:

Array
(
    [0] => Array
        (
            [name] => 商家4
            [distance] => 1
        )

    [1] => Array
        (
            [name] => 商家2
            [distance] => 3
        )

    [2] => Array
        (
            [name] => 商家1
            [distance] => 12
        )

    [3] => Array
        (
            [name] => 商家5
            [distance] => 19
        )

    [4] => Array
        (
            [name] => 商家6
            [distance] => 28
        )

    [5] => Array
        (
            [name] => 商家3
            [distance] => 34
        )
)

That's All.^ - ^.