我有两个看起来像这样的数组:
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个英尺的范围内,那么我会丢弃匹配的天数据。
我计划通过两个阵列做一个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";
...
}
}
}
}
答案 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>';