Laravel 在关联数组集合上的 contains() 帮助程序,使用多个参数进行搜索
Laravel's contains() helper on Collection of associative arrays, searching with multiple arguments
我有这个精确的 GIS 坐标集合,我正在尝试使用 laravel 的包含帮助程序通过纬度和经度来查找位置匹配。集合样本为 $points
:
Polygon {#16091
#points: array:103 [
0 => Point {#719
+x: -93.299203918246
+y: 44.914451664177
}
1 => Point {#729
+x: -93.299203946751
+y: 44.914492803531
}
2 => Point {#737
+x: -93.299203993418
+y: 44.914561369423
}
3 => Point {#738
+x: -93.299204049158
+y: 44.914643647233
}
]
}
我的支票是 if ($points->contains($lng, $lat)) { // do something }
。我没有得到任何匹配项,所以很好奇我是否可以在这种情况下使用 contains()
?我知道它适用于更简单的集合。我尝试对肯定会完全匹配的内容进行硬编码(从我正在搜索的数据集中提取),但它仍然 returns 错误。另一个我还没有开始解决的问题是,来自一个设置 $lat
和 $lng
的查询的坐标有 6 位小数 (-93.208572
) 和 GIS我正在搜索的数据具有带 12 位小数的坐标 (44.174837264857
)。我的理解是 contains 仍然会找到匹配项,但我想当我到达那里时我会穿过那座桥......我还尝试用键/值对拆分检查:
$lngCheck = $points->contains('x', $lng);
$latCheck = $points->contains('y', $lat);
然后检查它们是否匹配。我还是老是报错。
这可能是 Collection 的 ->first()
函数的候选对象,它根据您提供的检查在集合中找到一个对象。在这种情况下:
$exists = $polygon->points->first(function($point, $index) use ($lat, $lng){
return $point->x == $lat && $point->y == $lng;
// ^ Invert if I've got my coordinates backwards.
});
if($exists){
// Found a matching point in the collection;
} else {
// Didn't find a matching point in the collection
}
我有这个精确的 GIS 坐标集合,我正在尝试使用 laravel 的包含帮助程序通过纬度和经度来查找位置匹配。集合样本为 $points
:
Polygon {#16091
#points: array:103 [
0 => Point {#719
+x: -93.299203918246
+y: 44.914451664177
}
1 => Point {#729
+x: -93.299203946751
+y: 44.914492803531
}
2 => Point {#737
+x: -93.299203993418
+y: 44.914561369423
}
3 => Point {#738
+x: -93.299204049158
+y: 44.914643647233
}
]
}
我的支票是 if ($points->contains($lng, $lat)) { // do something }
。我没有得到任何匹配项,所以很好奇我是否可以在这种情况下使用 contains()
?我知道它适用于更简单的集合。我尝试对肯定会完全匹配的内容进行硬编码(从我正在搜索的数据集中提取),但它仍然 returns 错误。另一个我还没有开始解决的问题是,来自一个设置 $lat
和 $lng
的查询的坐标有 6 位小数 (-93.208572
) 和 GIS我正在搜索的数据具有带 12 位小数的坐标 (44.174837264857
)。我的理解是 contains 仍然会找到匹配项,但我想当我到达那里时我会穿过那座桥......我还尝试用键/值对拆分检查:
$lngCheck = $points->contains('x', $lng);
$latCheck = $points->contains('y', $lat);
然后检查它们是否匹配。我还是老是报错。
这可能是 Collection 的 ->first()
函数的候选对象,它根据您提供的检查在集合中找到一个对象。在这种情况下:
$exists = $polygon->points->first(function($point, $index) use ($lat, $lng){
return $point->x == $lat && $point->y == $lng;
// ^ Invert if I've got my coordinates backwards.
});
if($exists){
// Found a matching point in the collection;
} else {
// Didn't find a matching point in the collection
}