php二维数组实现多条件合并数据

//如果code相同,当存在state=0和state=1同时存在或者state=0时取时间最小的数据,当state=1时取最新的时间数据,得到的数据合并成一个新数组
public function tests(){
        $array = [
            ['code' => 'HA001', 'state' => 0, 'time' => '2023-01-09 12:00:00'],
            ['code' => 'HA001', 'state' => 0, 'time' => '2023-01-02 12:00:00'],
            ['code' => 'HA001', 'state' => 1, 'time' => '2023-01-03 12:00:00'],
            ['code' => 'HA002', 'state' => 1, 'time' => '2023-01-04 12:00:00'],
            ['code' => 'HA002', 'state' => 1, 'time' => '2023-01-01 10:00:00'],
            ['code' => 'HA003', 'state' => 1, 'time' => '2023-01-04 12:00:00'],
            ['code' => 'HA003', 'state' => 1, 'time' => '2023-01-06 12:00:00'],
            ['code' => 'HA004', 'state' => 0, 'time' => '2023-01-03 10:00:00'],
            ['code' => 'HA004', 'state' => 1, 'time' => '2023-01-01 10:00:00'],
            ['code' => 'HA004', 'state' => 0, 'time' => '2023-01-07 10:00:00']
        ];
        $result = [];
        foreach ($array as $item) {
            $code = $item['code'];
            if (!isset($result[$code])) {
                $result[$code] = $item;
            } else {
                // 如果当前code已存在,则根据state和time进行判断
                if ($result[$code]['state'] === 0 && $item['state'] === 0) {
                    // 如果两个都是state=0,取time更小的
                    if (strtotime($item['time']) < strtotime($result[$code]['time'])) {
                        $result[$code] = $item;
                    }
                } elseif ($result[$code]['state'] === 1 && $item['state'] === 0) {
                    // 如果已有的是state=1,当前是state=0,替换为state=0的
                    $result[$code] = $item;
                } elseif ($result[$code]['state'] === 1 && $item['state'] === 1) {
                    // 如果两个都是state=1,取time更大的
                    if (strtotime($item['time']) > strtotime($result[$code]['time'])) {
                        $result[$code] = $item;
                    }
                }
            }
        }

// 重置键名(如果需要)
        $result = array_values($result);

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值