将两个多维数组与回调进行比较

时间:2015-05-05 16:42:50

标签: php multidimensional-array

我有两个看起来像这样的数组:

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"
      }...

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

我计划通过两个阵列做一个f​​oreach,但是现在我已经设置了一天,我只有一个密钥对,有一天比较所有其他密钥对,所以我无法将整天比较到列表中在另一个阵列中的几天。

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";
                ...
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

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

  

数组是相同的,我想将数组与自身进行比较   根据与其他人的匹配程度,删除天/ 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>';
相关问题