小滕的博客

小滕的技术点滴

PHP数组排序函数的学习笔记

1 year ago · 0 MIN READ
#PHP 

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.^ - ^.

···

xiao teng



备案号:皖ICP备14012032号-5