【问题标题】:How to find in multidimensional array values that are the same and make a new array with only unique value?如何在多维数组中找到相同的值并创建一个只有唯一值的新数组?
【发布时间】:2021-04-24 00:57:03
【问题描述】:

我有一个存储了我的 MySQL 数据库结果的数组。

$time = "14:51:00"

Array
(
    [0] => Array
        (
            [name] => richard
            [id] => 61
            [chauffeurId] => 60
            [lat] => 53.0291365
            [lon] => 5.65739468598697
            [pickupdate] => 2021-01-25
            [departuretime] => 12:55:00
            [arrivalTime] => 13:46:00
            [finalDestination] => 5.81155877224893,52.9808856
        )

    [1] => Array
        (
            [name] => Jan
            [id] => 64
            [chauffeurId] => 63
            [lat] => 53.19968475
            [lon] => 5.80069089560234
            [pickupdate] => 2021-01-25
            [departuretime] => 12:45:00
            [arrivalTime] => 13:51:00
            [finalDestination] => 5.81155877224893,52.9808856
        )

    [2] => Array
        (
            [name] => richard
            [id] => 61
            [chauffeurId] => 60
            [lat] => 53.0291365
            [lon] => 5.65739468598697
            [pickupdate] => 2021-01-25
            [departuretime] => 13:49:00
            [arrivalTime] => 14:50:00
            [finalDestination] => 5.81155877224893,52.9808856
        )

    [3] => Array
        (
            [name] => joris
            [id] => 59
            [chauffeurId] => 58
            [lat] => 52.9026474
            [lon] => 5.59003021194087
            [pickupdate] => 
            [departuretime] => 
            [arrivalTime] => 
            [finalDestination] => 
        )

    [4] => Array
        (
            [name] => frans
            [id] => 60
            [chauffeurId] => 59
            [lat] => 53.018652
            [lon] => 5.533441
            [pickupdate] => 
            [departuretime] => 
            [arrivalTime] => 
            [finalDestination] => 
        )

    [5] => Array
        (
            [name] => henk
            [id] => 62
            [chauffeurId] => 61
            [lat] => 53.02030965
            [lon] => 5.53122986346911
            [pickupdate] => 
            [departuretime] => 
            [arrivalTime] => 
            [finalDestination] => 
        )

    [6] => Array
        (
            [name] => Joop
            [id] => 65
            [chauffeurId] => 64
            [lat] => 52.9026474
            [lon] => 5.59003021194087
            [pickupdate] => 
            [departuretime] => 
            [arrivalTime] => 
            [finalDestination] => 
        )

)

我在这个数组中有两个数组,它们具有相等的 ['chauffeurId']。 所以我只想要两者之一。我想要的,需要有最接近存储在 $time 变量中的时间的 ['arrivaltime']。

然后数组需要如下所示:

Array
(
    [0] => Array
        (
            [name] => Jan
            [id] => 64
            [chauffeurId] => 63
            [lat] => 53.19968475
            [lon] => 5.80069089560234
            [pickupdate] => 2021-01-25
            [departuretime] => 12:45:00
            [arrivalTime] => 13:51:00
            [finalDestination] => 5.81155877224893,52.9808856
        )

    [1] => Array
        (
            [name] => richard
            [id] => 61
            [chauffeurId] => 60
            [lat] => 53.0291365
            [lon] => 5.65739468598697
            [pickupdate] => 2021-01-25
            [departuretime] => 13:49:00
            [arrivalTime] => 14:50:00
            [finalDestination] => 5.81155877224893,52.9808856
        )

    [2] => Array
        (
            [name] => joris
            [id] => 59
            [chauffeurId] => 58
            [lat] => 52.9026474
            [lon] => 5.59003021194087
            [pickupdate] => 
            [departuretime] => 
            [arrivalTime] => 
            [finalDestination] => 
        )

    [3] => Array
        (
            [name] => frans
            [id] => 60
            [chauffeurId] => 59
            [lat] => 53.018652
            [lon] => 5.533441
            [pickupdate] => 
            [departuretime] => 
            [arrivalTime] => 
            [finalDestination] => 
        )

    [4] => Array
        (
            [name] => henk
            [id] => 62
            [chauffeurId] => 61
            [lat] => 53.02030965
            [lon] => 5.53122986346911
            [pickupdate] => 
            [departuretime] => 
            [arrivalTime] => 
            [finalDestination] => 
        )

    [5] => Array
        (
            [name] => Joop
            [id] => 65
            [chauffeurId] => 64
            [lat] => 52.9026474
            [lon] => 5.59003021194087
            [pickupdate] => 
            [departuretime] => 
            [arrivalTime] => 
            [finalDestination] => 
        )

)

有哪些方法可以做到这一点?

【问题讨论】:

    标签: php arrays function sorting multidimensional-array


    【解决方案1】:

    我能想到的最简单的方法:

    $result = [];
    
    foreach ($array as $data) {
        $id = &$data['chauffeurId'];
        $data['timeDiff'] = abs($time - strtotime($data['arrivalTime']));
        $result[$id] = !isset($result[$id]) || $result[$id]['timeDiff'] > $data['timeDiff']
            ? $data
            : $result[$id];
    }
    
    print_r(array_values($result));
    

    但是如果你想使用排序:

    按照时间差对数组进行排序,然后对数组进行迭代,存储每个id的时间差。 然后检查当前id是否已经迭代过,当前时间差大于你已经迭代过的,然后去掉。

    $timeDiffs = [];
    
    $time = strtotime("14:51:00");
    
    usort($array, function ($item1, $item2) use ($time) {
        $diff1 = abs($time - strtotime($item1['arrivalTime']));
        $diff2 = abs($time - strtotime($item2['arrivalTime']));
        
        return $diff1 <=> $diff2;
    });
    
    foreach ($array as $key => $data) {
        $id = &$data['chauffeurId'];
        $timeDiff = abs($time - strtotime($data['arrivalTime']));
        
        
        if (isset($timeDiffs[$id]) && $timeDiff > $timeDiffs[$id]) {
            unset($array[$key]);
        } else {
            $timeDiffs[$id] = $timeDiff;
        }
    }
    
    print_r($array);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多