Laravel's has () помощник по коллекции ассоциативных массивов, поиск с несколькими аргументами - PullRequest
0 голосов
/ 31 октября 2018

У меня есть эта коллекция точных координат ГИС, и я пытаюсь найти совпадения местоположений, пропуская как лат, так и лонг, используя хелпер 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() в этом контексте? Я знаю, что это работает с более простой коллекцией. Я попытался жестко запрограммировать то, что определенно будет точным совпадением (извлечено из набора данных, который я ищу), и он все еще возвращает false. Еще одна проблема, с которой я даже не начал сталкиваться, заключается в том, что координаты, исходящие из одного запроса, задающего $lat и $lng, имеют 6 десятичных знаков (-93.208572), и данные ГИС, которые я ищу имеет координаты с 12 десятичными знаками (44.174837264857). Насколько я понимаю, то, что содержит, все равно найдет совпадения, но я предполагаю, что перейду этот мост, когда доберусь туда ... Я также попытался разделить проверку парами ключ / значение:

$lngCheck = $points->contains('x', $lng);
$latCheck = $points->contains('y', $lat);

и затем проверка того, верны ли они для совпадения. Я все еще всегда становлюсь ложным.

1 Ответ

0 голосов
/ 31 октября 2018

Это, вероятно, кандидат на функцию ->first() функции Collection, которая находит объект в коллекции на основе предоставленной вами проверки. В этом случае:

$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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...