PHP 二维数组根据某个字段排序

PHP 二维数组根据某个字段排序PHP 二维数组根据某个字段排序

大家好,又见面了,我是你们的朋友全栈君。

数据:
$data[] = array(‘customer_name’ => ‘小李’, ‘money’ => 12, ‘distance’ => 2, ‘address’ => ‘长安街C坊’);
$data[] = array(‘customer_name’ => ‘王晓’, ‘money’ => 30, ‘distance’ => 10, ‘address’ => ‘北大街30号’);
$data[] = array(‘customer_name’ => ‘赵小雅’, ‘money’ => 89, ‘distance’ => 6, ‘address’ => ‘解放路恒基大厦A座’);
$data[] = array(‘customer_name’ => ‘小月’, ‘money’ => 150, ‘distance’ => 5, ‘address’ => ‘天桥十字东400米’);
$data[] = array(‘customer_name’ => ‘李亮亮’, ‘money’ => 45, ‘distance’ => 26, ‘address’ => ‘天山西路198弄’);
$data[] = array(‘customer_name’ => ‘董娟’, ‘money’ => 67, ‘distance’ => 17, ‘address’ => ‘新大南路2号’);

方法一:

function arraySort($array,$keys,$sort='asc') { 
   
    $newArr = $valArr = array();
    foreach ($array as $key=>$value) { 
   
        $valArr[$key] = $value[$keys];
    }
    ($sort == 'asc') ?  asort($valArr) : arsort($valArr);
    reset($valArr);
    foreach($valArr as $key=>$value) { 
   
        $newArr[$key] = $array[$key];
    }
    return $newArr;
}

方法二:

/** * 二维数组根据某个字段排序 * @param array $array 要排序的数组 * @param string $keys 要排序的键字段 * @param string $sort 排序类型 SORT_ASC SORT_DESC * @return array 排序后的数组 */
function arraySort($array, $keys, $sort = SORT_DESC) { 
   
    $keysValue = [];
    foreach ($array as $k => $v) { 
   
        $keysValue[$k] = $v[$keys];
    }
    array_multisort($keysValue, $sort, $array);
    return $array;
}

# 按距离降序排序
$a = arraySort($data, 'distance', SORT_DESC);
print_r($a);
# 按money升序排序
$b = arraySort($data, 'money', SORT_ASC);
print_r($b);
Array
(
    [0] => Array
        (
            [customer_name] => 李亮亮
            [money] => 45
            [distance] => 26
            [address] => 天山西路198)

    [1] => Array
        (
            [customer_name] => 董娟
            [money] => 67
            [distance] => 17
            [address] => 新大南路2)

扩展:

定义和用法
reset() 函数将内部指针指向数组中的第一个元素,并输出。
current() – 返回数组中的当前元素的值。
end() – 将内部指针指向数组中的最后一个元素,并输出。
next() – 将内部指针指向数组中的下一个元素,并输出。
prev() – 将内部指针指向数组中的上一个元素,并输出。
each() – 返回当前元素的键名和键值,并将内部指针向前移动。

sort 对数组的值按照升序排列(rsort降序),不保留原始的键
ksort 对数组的键按照升序排列(krsort降序) 保留键值关系
asort 对数组的值按照升序排列(arsort降序),保留键值关系

array_multisort
  • 排序顺序标志:

    SORT_ASC – 按照上升顺序排序
    SORT_DESC – 按照下降顺序排序

  • 排序类型标志:

    SORT_REGULAR – 将项目按照通常方法比较
    SORT_NUMERIC – 将项目按照数值比较
    SORT_STRING – 将项目按照字符串比较
    每个数组之后不能指定两个同类的排序标志。每个数组后指定的排序标志仅对该数组有效 – 在此之前为默认值 SORT_ASC 和 SORT_REGULAR。

$ar = array(
    array("b10", 'c11', 101, 100, "a"),
    array(1, 2, "2", 9, 5)
);
array_multisort($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC);
print_r($ar);
Array
(
    [0] => Array
        (
            [0] => 100
            [1] => 101
            [2] => a
            [3] => b10
            [4] => c11
        )

    [1] => Array
        (
            [0] => 9
            [1] => 2
            [2] => 5
            [3] => 1
            [4] => 2
        )

)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105808.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux下快速设定ip bond

    在计算机网路普及的初期,很多OS系统都使用的为单网卡方式,即一个网卡使用一个IP地址。随着网络要求的不断提高,我们可以对多个网卡进行绑定聚合当一个逻辑网络接口来使用,从而大幅提升服务器的网络吞吐(I/

    2021年12月26日
    66
  • 塑料高分子应用计算机,分子模拟方法与模拟软件Materials+Studio在高分子材料中的应用.pdf…

    塑料高分子应用计算机,分子模拟方法与模拟软件Materials+Studio在高分子材料中的应用.pdf…塑料庄吕清等——分了模拟方法及模拟软件MaterialsStudio在高分了材料中的应用2010年39卷第4期嵛誓。o。tjl:?、‘;’j1恭。j、t?lt.j一、o.、0分子模拟方法及模拟软件MaterialsStudio在高分子材料中的应用’庄昌清。岳红。张慧军(西北工业大学理学院应用化学系,陕西,西安710129)摘要:综述分子模拟的发…

    2022年5月25日
    43
  • 字符串数组转集合_安全方法把字符串转集合

    字符串数组转集合_安全方法把字符串转集合//controller中接收id数组, //html页面; varids=$(‘#yourGrid’).jqGrid(‘getGridParam’,’selarrrow’); //bean属性设置值,表达提交方式, $(“#ids”).val(JSON.stringify(ids)); //controller List<String>ids=JSON.par…

    2022年9月19日
    0
  • 解决hash冲突的几种方法_hashmap hash冲突

    解决hash冲突的几种方法_hashmap hash冲突哈希表定义散列表(Hashtable,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。实现关键点hash函数hash冲突解决首先来说hash函数,java中对象都已一个hashCode()方法,那为什么还

    2022年8月30日
    2
  • futex机制介绍「建议收藏」

    futex机制介绍「建议收藏」1、概念futex:asortoffast,user-spacemutualexclusionprimitive. Futex是一种用户态和内核态混合的同步机制。首先,同步的进程间通过mmap共享一段内存,futex变量就位于这段共享的内存中且操作是原子的,当进程尝试进入互斥区或者退出互斥区的时候,先去查看共享内存中的futex变量,如果没有竞争发生,则只修改futex,而不用…

    2022年4月19日
    67
  • 粒子群算法的matlab实现(一)[通俗易懂]

    粒子群算法的matlab实现(一)[通俗易懂]粒子群算法(ParticleSwarmOptimization,PSO)是20世纪90年代兴起的一门学科,因其概念简明、实现方便、收敛速度快而为人所知。粒子群算法的基本思想是模拟鸟群随机搜寻食物的捕食行为,鸟群通过自身经验和种群之间的交流调整自己的搜寻路径,从而找到食物最多的地点。其中每只鸟的位置/路径则为自变量组合,每次到达的地点的食物密度即函数值。每次搜寻都会根据自身经验(自身历史搜寻的最

    2022年6月10日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号