加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 基于有序数组对多维数组进行排序

发布时间:2020-12-13 16:57:39 所属栏目:PHP教程 来源:网络整理
导读:这似乎是书中最古老的问题,有数百种可用的资源,但到目前为止,我尝试的每个解决方案都没有解决我的问题.我希望你能提供帮助. 我正在尝试显示显示最近31天数据的图表.输出的数组如下所示: $data[ 0 = 'day' = 10,'amount' = 5,'count' = 2 1 = 'day' = 16,'am
这似乎是书中最古老的问题,有数百种可用的资源,但到目前为止,我尝试的每个解决方案都没有解决我的问题.我希望你能提供帮助.

我正在尝试显示显示最近31天数据的图表.输出的数组如下所示:

$data[
    0 =>
       'day' => 10,'amount' => 5,'count' => 2
    1 =>
       'day' => 16,'amount' => 4,'count' => 2
    2 =>
       'day' => 21,'amount' => 16,'count' => 1
    3 =>
       'day' => 11,'amount' => 0,'count' => 0
    4 =>
       'day' => 12,'count' => 0
]

基本上这个数组由两部分组成.前三个内部数组是包含金额和计数的天数,其余27个是任何未计入的天数,其金额和计数设置为0.因此,例如$data [5]将是第13天和$data [21]第31天.$data [22]将等于第1天,直至第9天,因此显示过去31天.

此外,还有一个我们想要输出的有序数组.

$days[
    0 =>
        'day' => 10
    1 =>
        'day' => 11
    2 =>
        'day' => 12
    ...
    30 =>
        'day' => 9
]

我已经尝试过以下但是现在订购了$data,它基本上只是$days的复制品,并且丢失了$data中保存的其他值.

$data = array_uintersect($days,$data,array($this,'compare_days'));

function compare_days($order,$array) {
    return strcmp($order['day'],$array['day']);
}

这是怎么回事?如何对$data进行排序,以便保留数据并在$days内按需订购?

解决方法

只需使用 uasort作为

uasort($data,function($a,$b) use ($days){
    foreach($days as $value){
        if($a['day'] == $value['day']){
            return 0;
            break;
        }
        if($b['day'] == $value['day']){
            return 1;
            break;
        }
    }
});

Demo

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读