blog

博客

View on GitHub

多维数组根据某个值排序

PHP开发中 多维数组排序 还是经常遇到的,特别是多维数组中,要根据某个值来排序。

PHP 自带了一个函数,可以帮助我们非常方便的实现这个功能array_multisort

这篇博客只是 记录下怎么用 ,并不是指导小白的说明文。

首先贴一个 PHP官方文档的解释 array_multisort-中文——- array_multisort-英文

关于这个函数的介绍就不详细展开了,文档写的特别清楚,只说怎么用

<?php

$arr = [
    ['name' => 'd1', 'height' => 172, 'age' => 21],
    ['name' => 'b1', 'height' => 188, 'age' => 49],
    ['name' => 'f1', 'height' => 179, 'age' => 15],
    ['name' => 'a1', 'height' => 178, 'age' => 32],
    ['name' => 'g1', 'height' => 168, 'age' => 15],
    ['name' => 'c1', 'height' => 178, 'age' => 25],
    ['name' => 'e1', 'height' => 198, 'age' => 16],
];

/**
* 假设有这么个数组, 我们希望可以根据 身高升序, 身高一样的按照年龄降序
 */

$heightArr = array_column($arr, 'height');
$ageArr = array_column($arr, 'age');

array_multisort(
    $heightArr, SORT_ASC, 
    $ageArr, SORT_DESC,
    $arr
    );

print_r($heightArr);
print_r($ageArr);
print_r($arr);

/**
 * 最终结果 
 * $heightArr会 升序排序  
 * $ageArr会 降序排序  
 * $heightArr会 身高升序, 身高一样的按照年龄降序  
 */

//如果我们只需要$arr 排序之后的结果 可以直接这么写
array_multisort(
    array_column($arr, 'height'), SORT_ASC, 
    array_column($arr, 'age'), SORT_DESC,
    $arr
    );