php数组排序

2021-10-13

排序标记

$sort_flags = [
    SORT_REGULAR,   // 正常比较元素
    SORT_NUMERIC,   // 元素被作为数字来比较
    SORT_STRING,    // 元素元被作为字符串来比较
    SORT_LOCALE_STRING,  // 根据当前的区域(locale)设置来把单元当作字符串比较,可以用setlocale()来改变当前区域。
    SORT_NATURAL,  // 类似natsort()对每个元素以“自然的顺序”对字符串进行排序。
    SORT_FLAG_CASE,  // 能够与SORT_STRING或SORT_NATURAL合并(使用|位运算合并),不区分大小写排序字符串。
];

数组值排序

// 对数组$array的值进行从低到高的排序,返回bool值是否执行成功;排序后数组索引重排,关联数组变为索引数组
sort($array, $sort_flag = SORT_REGULAR);

// 对数组$array的值进行从高到低的排序,返回bool值是否执行成功;排序后数组索引重排,关联数组变为索引数组
rsort($array, $sort_flag = SORT_REGULAR);

// 使用自定义方法$value_compare_func对数组$array的值进行排序,返回bool值是否执行成功;排序后数组索引重排,关联数组变为索引数组
// value_compare_func回调的两个参数为数组$array的元素;在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于0的整数
usort($array, $value_compare_func = function ($val1, $val2) {return $val1 <=> $val2;});

// 对数组$array的值进行从低到高的排序,返回bool值是否执行成功;数组键不会变化
asort($array, $sort_flag = SORT_REGULAR);

// 对数组$array的值进行从高到低的排序,返回bool值是否执行成功;数组键不会变化
arsort($array, $sort_flag = SORT_REGULAR);

// 使用自定义方法$value_compare_func对数组$array的值进行排序,返回bool值是否执行成功;数组键不会变化
// value_compare_func回调的两个参数为数组$array的元素;在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于0的整数
uasort($array, $value_compare_func = function ($val1, $val2) {return $val1 <=> $val2;});

// 自然排序,实现了一个和人们通常对字母数字字符串进行排序的方法,对数组$array的值进行排序;数组键不会变化,排序区分大小写
natsort($array);
var_dump($array);

// 自然排序,实现了一个和人们通常对字母数字字符串进行排序的方法,对数组$array的值进行排序;数组键不会变化,排序不区分大小写
natcasesort($array);
var_dump($array);

数组键排序

// 对数组$array的键进行从低到高的排序,返回bool值是否执行成功;
ksort($array, $sort_flag = SORT_REGULAR);

// 对数组$array的键进行从高到低的排序,返回bool值是否执行成功;
krsort($array, $sort_flag = SORT_REGULAR);

// 使用自定义方法$key_compare_func对数组$array的键进行排序,返回bool值是否执行成功
// value_compare_func回调的两个参数为数组$array的元素的键;在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于0的整数
uksort($array, $key_compare_func = function ($val1, $val2) {return $val1 <=> $val2;});

二维数组排序

$array1_sort_orders = [
    SORT_ASC, // 升序
    SORT_DESC, // 降序
];

$array = [
    ['a' => 1, 'b' => 0, 'e' => 100, 'f' => 0, 'g' => -1],
    ['a' => 7, 'b' => 7, 'e' => 1, 'f' => 10, 'g' => 11],
    ['a' => 5, 'b' => 2, 'e' => 100, 'f' => 0, 'g' => -1],
];
// 1、一次对多个数组排序$array1,$array1_sort_order,$sort_flag;三个参数为一组,可以指定多组,每一组单独排序,后面排序的组根据前面已排序组在进行排序
// 2、根据某一维或多维数组$array1对多维数组$array进行排序
// 关联键名会保持不变,但数字键名会被重新索引
// $array1_sort_order和$sort_flag可以省略
array_multisort($array1, $array1_sort_order = SORT_ASC, $sort_flag = SORT_REGULAR, $array);


$array1 = array_column($array, 'a');
$array2 = array_column($array, 'b');
$array3 = array_column($array, 'e');
var_dump(array_multisort($array1, SORT_ASC, $array2, SORT_ASC, $array3, SORT_ASC, $array));

var_dump($array1);
var_dump($array2);
var_dump($array3);
var_dump($array);

 

{/if}