【问题标题】:Comparing two multidimensional arrays with a callback将两个多维数组与回调进行比较
【发布时间】:2015-07-15 12:37:19
【问题描述】:

我有两个如下所示的数组:

array(1) {
  ["x8hQz"]=>
  array(1) {
    ["2014-07-16"]=>
    array(20) {
      [0]=>
      array(2) {
        ["latitude"]=>
        string(16) "39.9298775948310"
        ["longitude"]=>
        string(17) "-87.3510829502270"
      }
      [1]=>
      array(2) {
        ["latitude"]=>
        string(16) "39.9298960856350"
        ["longitude"]=>
        string(17) "-87.3511097005120"
      }...

因此,每个数组都包含一个设备 ID、日期列表和每个日期的 GPS 位置列表。每天可能有不同数量的 GPS 位置。数组是相同的,我想将数组与其自身进行比较,并根据它们与数组中其他日期的匹配程度来删除日期/GPS 位置组,这样当我完成时,其中一个数组只包含具有唯一位置列表的日期在每个设备的基础上。我想比较数组中的天数,如果一天内的每个值对都在基于 GPS 位置的 x 英尺内,那么我将丢弃匹配的天数数据。

我正计划通过两个数组进行 foreach,但是由于我现在设置了它,因此我一天只有一个密钥对来比较所有其他密钥对,因此我无法将一整天与列表进行比较另一个数组中的天数。

foreach ($trackArray as $deviceKey => $deviceValue)
{
    //echo $deviceKey . $deviceValue . "\n";
    foreach ($deviceValue as $dateKey => $dateValue)
    {
        //echo $dateKey . $dateValue . "\n";
        foreach ($dateValue as $locationKey => $locationValue)
        {
            //echo $locationKey . $locationValue . "\n";
            //echo $trackArray[$deviceKey][$dateKey][$locationKey]['latitude'];
            foreach ($finalTrackArray[$deviceKey] as $finalDateKey => $finalDateValue)
            {
                //echo $finalDateKey . $finalDateValue . "\n";
                ...
            }
        }
    }
}

【问题讨论】:

    标签: php multidimensional-array


    【解决方案1】:

    非常不切实际且处理密集,但这是您问题第一部分的解决方案。

    数组是相同的,我想将数组与自身进行比较 根据与其他位置组的匹配程度来删除天数/GPS 位置组 数组中的天数,这样当我完成时,只有一个数组 包含在每台设备上具有唯一位置列表的日期 基础

    代码

    $finalTrackArray = []; 
    foreach ($trackArray as $deviceKey => $deviceValue) { 
        foreach ($deviceValue as $dateKey => $dateValue) { 
            foreach ($dateValue as $locationValue) { 
                $serializedLocationList[] = serialize($locationValue); # Collect serialized version of all location value: latitude and longitude
            }
            foreach (array_unique($serializedLocationList, SORT_STRING) as $serializedLocationValue) { 
                $finalTrackArray[$deviceKey][$dateKey][] = unserialize($serializedLocationValue);
            }
        }
    } 
    //echo '<pre>'.print_r($finalTrackArray,1).'</pre>';
    

    【讨论】:

    • 有什么更实用、更节省资源的方法?
    • 不知道...这是我遇到过的最难的多维数组问题..我花了很多时间解决它..希望它对你有用..
    • 您提供的代码的问题是它只是删除了重复值,而实际上我们需要查看数组,对一个日期内的每个值对执行一些数学运算,并与其他每个日期值对进行比较然后根据比较的结果做出决定。我寻求的答案和你提出的答案解决了两个不同的问题。
    • 我认为你需要使用自己的创新来解决这个问题......我认为没有人会回答这个问题......因为这正是你所要求的。
    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 2015-08-12
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    相关资源
    最近更新 更多