使用回调函数比较两个多维数组

4

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

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";
                ...
            }
        }
    }
}
1个回答

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>';

有没有更实用、更节省资源的方法来完成它? - Hybrid
不知道...这是我遇到过的最难的多维数组问题...我花了很多时间来解决它...希望它对你有用... - Aviz
你提供的代码问题在于它只是删除了重复值,而实际上我们需要查看数组,在每个日期内对每个值对执行一些数学运算,然后根据比较结果做出决策。我寻求的答案和你提供的答案解决了两个不同的问题。 - Hybrid
我认为你将需要在这个问题上使用自己的创新... 我不认为有人会回答这个问题.. 因为它要求的内容太多了。 - Aviz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接