微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

这似乎是书中最古老的问题,有数百种可用的资源,但到目前为止,我尝试的每个解决方案都没有解决我的问题.我希望你能提供帮助.

我正在尝试显示显示最近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,
       'amount' => 0,
       '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

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

相关推荐