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;不然会有报错提示;

时间: 2024-12-30 23:30:26

php多维数组自定义排序 uasort()的相关文章

php二维数组自定义排序

PHP一维数组的排序可以用sort(),asort(),arsort()等函数,但是PHP二维数组的排序需要自定义. 以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义: function array_sort($arr,$keys,$type='asc'){ $keysvalue = $new_array = array(); foreach ($arr as $k=>$v){ $keysvalue[$k] = $v[$keys]; } if($type == 'asc'){

php 二维数组自定义排序

有时候需要对一个二维数组进行排序,自定义对应的排序规则,比如对一个班级里面的同学,先按身高降序排序,身高相同的,再按体重降序排序... 代码: <?php $array = [ ["id" => "1", "name" => "a", "age" => "19",], ["id" => "2", "name&

array_multisort—对多个数组或多维数组进行排序

From: http://www.cnblogs.com/lwbqqyumidi/archive/2013/01/31/2887188.html PHP中array_multisort可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序. 关联(string)键名保持不变,但数字键名会被重新索引. 输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能.第一个数组是要排序的主要数组.数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的

PHP array_multisort—对多个数组或多维数组进行排序

PHP中array_multisort可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序. 关联(string)键名保持不变,但数字键名会被重新索引. 输入数组被当成一个表的列并以行来排序--这类似于 SQL 的 ORDER BY 子句的功能.第一个数组是要排序的主要数组.数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推.--这句话是理解此函数用法的关键. 第一个参数必须是一个数组.接下来的每个参数可以是数组或者是下面列出的排序标志. 排序顺序

二维数组的排序

1 result =[['7250','1'],['7510','2'],['7759','0'],['6523','33']] 2 3 copy_result = [] 4 5 for item in result: 6 copy_result.append([int(item[0]),item[1]]) 7 8 print result 9 # output: 10 # [['7250', '1'], ['7510', '2'], ['7759', '0'], ['6523', '33']]

PHP对多维数组的排序-也是个蛋疼的问题

1. 排序最好是放在数据库中做,但是有时候得在php中对多维数组排序 code :  参考网上上的 按某个字段排序 /** * 二维数组排序 * @param array $data 一个二维数组 * @param string $direction 排序方式('SORT_DESC' OR 'SORT_ASC') * @param string $field 排序字段 */ public static function sort_two_array($data,$direction='SORT_

PHP 多维数组的排序----服务器负载均衡的应用

array_multisort 在php 中该函数实现多维数组的排序功能,在呼叫中心或者计费服务器中,或许我们需要实现多台服务器按权重(百分比)的模式进行对语音进行分发,那么该函数将帮助你实现该需求. 实例中core_callback_setting 将会保存可以使用的服务器的配置信息: id---字段ID,也是服务器的ID标记 ,ast_ob_servername ---服务器的名字标识, ,ast_ob_host-----服务器IP地址 ,ast_ob_port-----AMI 服务器端口

java中二维数组的排序

首先定义一个5X8的二维数组,然后使用随机数填充满.借助Arrays的方法对二维数组进行排序.参考思路:先把二维数组使用System.arraycopy进行数组复制到一个一维数组然后使用sort进行排序最后再复制回到二维数组. 关于随机数0-100的 随机整数的获取办法有多种,下面是参考办法之一: import java.util.Arrays; public class TwoDimenSort { public static void main(String[] args) { int xL

二维数组元素排序

<script type="text/javascript">//--------------------------1数值排序-------------------------var arr1=[[22,33,44],[1,0,6,2],[33,10],[10,5]];arr1.sort(function(x,y){ return x[1] -y[1];//按照二维数组arr1中每个数组元素(数组)的第二个元素升序排列 });console.log(arr1); //--