php 复杂数组排序,php 数组这样的排序怎么做

本文介绍了如何在PHP中处理带有字符串键的数组,使用array_merge与array_flip进行一次性排序,并讨论了array_merge的局限性。随后,作者展示了针对整数键数组的多行排序方法,强调了使用uksort的效率优势和灵活性。
摘要由CSDN通过智能技术生成

楼上的答案都是正确的 ... 不过不够帅 ... 我画蛇添足一下好了 ...

如果原数组的键值不是数字而是字符串的话 ... 这样的排序可以一行解决 ...<?php

/* the original array with string keys ... */

$src = [

'a' => 'foo',

'b' => 'bar',

'c' => 'baz',

];

/* the order array ... */

$order = [ 'b', 'a', 'c' ];

/* sort using single line ... */

print_r( array_merge( array_flip( $order ), $src ) );

但是 array_merge() 这个函数有个倒霉特性 ...

当原数组的键值整形化之后不为零的时候 ... 不论原来的键值是什么顺序都会被这个函数全部丢弃 ...

所以你的需求没办法用这种简单的方式解决 ... 只能借助于排序函数 ... 代码如下 ...<?php

/* the original array with integer keys ... */

$src = [

'1' => 'foo',

'2' => 'bar',

'3' => 'baz',

];

/* the order array ... type is not important ... */

$order = [ 1, '3', 0b10 ];

/* get order weight ... */

$weight = array_flip( $order );

/* we do not want to change the source array order huh ..? */

$dst = $src;

/* 3 lines sorting ... not very difficult ... */

uksort( $dst, function( $left, $right ) use ( $weight ) {

/* $left never equals to $right ... so 0 is impossible ... */

return ( $weight[$left] < $weight[$right] ) ? -1 : 1;

} );

/* show time ... */

print_r( $dst );

这种方式虽然写起来复杂 ... 但时间复杂度要低于楼上的整个遍历重生成新数组 ...

所以效率更高 ... 并且如果需要更改排序方式的话也更加灵活 ...

恩 ... 就是这样啦 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP中,对二维数组进行排序有多种方法。引用和提供了两种不同的排序方法。方法一是通过自定义函数multisortArray来实现,该方法接受一个二维数组和需要排序的字段作为参数,并返回排序后的数组。方法二则是通过调用PHP内置函数array_multisort来实现排序。该函数接受两个或多个数组作为参数,并按照指定的字段和排序类型进行排序。 举个例子,如果我们有一个二维数组$arr,其中包含了 "f" 和 "s" 两个字段,我们可以使用以下代码对其进行排序: ``` $arr = [ ["f" => 1, "s" => 2], ["f" => 1, "s" => 3], ["f" => 2, "s" => 3], ]; $first = array_column($arr, "f"); $second = array_column($arr, "s"); array_multisort($first, SORT_ASC, $second, SORT_DESC, $arr); ``` 这样,数组$arr就会根据第一个字段"f"进行升序排序,如果第一个字段相同,则根据第二个字段"s"进行降序排序。最后,我们可以使用dd()函数来显示排序后的数组。 以上就是对PHP二维数组排序的方法和一个示例。你可以根据自己的需求选择合适的方法来排序二维数组。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [PHP二维数组排序](https://blog.csdn.net/qq_29945729/article/details/68923884)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [php二维数组排序](https://blog.csdn.net/weiguang102/article/details/115507617)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值