关于PHP数组排序的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于PHP数组排序的问题相关的知识,希望对你有一定的参考价值。

用asort排序数组,结果出现这个问题。。什么情况还有怎么可以怕前面的键值按照大小重新排序一下
排序已解决,求解决那个12。00%什么情况

如果不是数字,排序会按照首字母来排,所以10.20%会在会比12.00%小,也不9开头的小。

(可以先去掉%然后排序再加上%)

$a = array(\'12.0%\', \'10.2%\', \'10.5%\', \'9.5%\', \'205.1%\', \'215.1%\', \'3.2%\');
$a = array_map(function($i)return substr($i, 0, -1);, $a);
asort($a);
$a = array_map(function($i)return $i . \'%\';, $a);
var_dump($a);exit;
参考技术A 用usort可以重建key追问

重建key我知道,那个排序不太会

追答

你是要先排序value,相同的情况再排序key?

如果只排序key的话用uksort

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

php内置的排序函数很多;正反各种排;

常用的排序函数:

sort() - 以升序对数组排序
rsort() - 以降序对数组排序
asort() - 根据值,以升序对关联数组进行排序
ksort() - 根据键,以升序对关联数组进行排序
arsort() - 根据值,以降序对关联数组进行排序
krsort() - 根据键,以降序对关联数组进行排序

基本都能满足需求了;关于这些函数的使用方法就不多啰嗦了;

但是在项目的实际开发中还是会有些更加苛刻的排序需求;今天要介绍的排序函数是: 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以升序的方式排序;

首先需要写一个自定义排序的规则;

// 自定义排序函数
function my_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 ‘<pre>排序前:<br>‘;
print_r($sort_array);
uasort($sort_array, "my_sort");
echo "排序后:<br>";
print_r ($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
        )

)
排序后:
Array
(
    [array5] => Array
        (
            [word] => test5
        )

    [array1] => Array
        (
            [word] => test1
            [sortnumber] => 1
        )

    [array4] => Array
        (
            [word] => test2
            [sortnumber] => 2
        )

    [array2] => Array
        (
            [word] => test3
            [sortnumber] => 3
        )

    [array3] => Array
        (
            [word] => test4
            [sortnumber] => 4
        )

)

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

技术分享

以上是关于关于PHP数组排序的问题的主要内容,如果未能解决你的问题,请参考以下文章

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

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

PHP中的排序函数sortasortrsortkrsortksort区别分析

PHP中的排序函数sortasortrsortkrsortksort区别分析

PHP数组基本排序算法和查找算法

PHP 二维数组排序保持键名不变