php多维数组自定义排序 uasort()

对数组进行排序

PHP 有一些用来排序数组的函数, 这个文档会把它们列出来。

主要区别有:

  • 有些函数基于 array 的键来排序, 而其他的基于值来排序的:$array['key'] = 'value';。
  • 排序之后键和值之间的关联关系是否能够保持, 是指排序之后数组的键可能 会被重置为数字型的(0,1,2 ...)。
  • 排序的顺序有:字母表顺序, 由低到高(升序), 由高到低(降序),数字排序,自然排序,随机顺序或者用户自定义排序。
  • 注意:下列的所有排序函数都是直接作用于数组本身, 而不是返回一个新的有序的数组。
  • 以下函数对于数组中相等的元素,它们在排序后的顺序是未定义的。 (也即相等元素之间的顺序是不稳定的)。
函数名称 排序依据 数组索引键保持 排序的顺序 相关函数
array_multisort() 键值关联的保持,数字类型的不保持 第一个数组或者由选项指定 array_walk()
asort() 由低到高 arsort()
arsort() 由高到低 asort()
krsort() 由高到低 ksort()
ksort() 由低到高 asort()
natcasesort() 自然排序,大小写不敏感 natsort()
natsort() 自然排序 natcasesort()
rsort() 由高到低 sort()
shuffle() 随机 array_rand()
sort() 由高到低 rsort()
uasort() 由用户定义 uksort()
uksort() 由用户定义 uasort()
usort() 由用户定义 uasort()

uasort主要是用在需要按照自定义的方法并且保留索引关系对多维数组的排序上;

有如下数组

$sort_array = array(
    "array1" => array(
        'word' => 'test1',
        'sortnumber' => 1,
        ),
    'array3' => array(
            'word' => 'test4',
            'sortnumber' => 4,
            ),
    'array2' => array(
        'word' => 'test3',
        'sortnumber' => 3,
        ),
    'array5' => array(
        'word' => 'test5',
        ),
    'array4' => array(
        'word' => 'test2',
        'sortnumber' => 2,
        ),
    );

需求是按照sortnumber以升序的方式排序;
首先需要写一个自定义排序的规则;

// 自定义排序函数
functionmy_sort($a, $b)
{
    $prev = isset($a['sortnumber']) ? $a['sortnumber'] : 0;
    $next = isset($b['sortnumber']) ? $b['sortnumber'] : 0;
    if ($prev == $next) return 0;
    return ($prev < $next) ? -1 : 1;
}
echo '排序前:';
print_r($sort_array);
uasort($sort_array, "my_sort");
echo "排序后:";
print_r($sort_array);

最后需要提醒的是:自定义的函数要使用isset检测下需要排序的字段是否存在如不存在赋个默认的0;

posted on 2023-08-07 19:00  何苦->  阅读(212)  评论(0编辑  收藏  举报

导航