PHP如何对二维数组进行排序

方法一:

//二维数组排序
//$arr   二维数组
//$keys  排序的键值
//$order 1是降序,0是升序
function array_sort($arr, $keys, $order = 0)
{
    if (!is_array($arr)) {
        return $arr;
    }
    $keys_value = [];
    foreach ($arr as $key => $val) {
        $keys_value[$key] = $val[$keys];
    }
    if ($order == 0) {
        asort($keys_value);
    } else {
        arsort($keys_value);
    }
    reset($keys_value);
    $keysort = [];
    foreach ($keys_value as $key => $vals) {
        $keysort[$key] = $key;
    }
    $new_array = [];
    foreach ($keysort as $key => $val) {
        $new_array[$key] = $arr[$val];
        //不需要保留键值
        //$new_array[] = $arr[$val];
    }
    return $new_array;
}

方法二:

/**
 * 二维数组排序(改变原值)
 *
 * @param array  $data  二维数据
 * @param string $field 要排序的key名
 * @param string $sort  asc升序,desc降序
 */
function sortList(&$data, $field, $sort = 'asc')
{
    usort($data, function ($a, $b) use ($field, $sort) {
        //不排序
        /*if ($a[$field] == $b[$field]) {
            echo $a[$field] . '-' . $b[$field] . "\r\n";
             return 0;
         }*/
        if ($sort == 'asc') {
            //升序
            return ($a[$field] < $b[$field]) ? -1 : 1;
        } else {
            //降序
            return ($a[$field] > $b[$field]) ? -1 : 1;
        }
    });
}

方法三: 利用Laravel的集合(Collection) 内置函数排序


$arr = [
    ['name' => 'Desk', 'price' => 200],
    ['name' => 'Chair', 'price' => 100],
    ['name' => 'Bookcase', 'price' => 150],
];
$collection = collect($arr);

$sorted = $collection->sortBy('price')->toArray();  // asc
$sorted = $collection->sortByDesc('price')->toArray();  //desc

方法四 :

$arr = [
    ['name' => 'Desk', 'price' => 200],
    ['name' => 'Chair', 'price' => 100],
    ['name' => 'Bookcase', 'price' => 150],
];
//SORT_ASC | SORT_DESC
array_multisort(array_column($arr, 'price'), SORT_ASC, $arr);

var_dump($arr);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值