Проверить, находятся ли числа между указанным набором чисел? - PullRequest
1 голос
/ 25 февраля 2020

Этот код:

$url = ('https://www.vegvesen.no/trafikk/xml/savedsearch.rss?id=601');

function Feed($url) {
  $feed = simplexml_load_file($url) or die('Cannot Connect');
  $result = array();
  foreach ($feed->channel->item as $content) {
      array_push($result, $content);
  }
  return $result;
}

feed. php ^^

require_once 'feed.php';

    $title = 'Ev 134';

    foreach(Feed('https://www.vegvesen.no/trafikk/xml/savedsearch.rss?id=601') as $f ) {
        if (strpos($f->title, $title) !== false)
            echo $f->children('georss', true)->children('gml', true)->children('gml', true). "<br>";
    }

Выход:

59.838314 6.865717
59.662615 10.569110
59.709940 10.690916

Как можно Я проверяю, находятся ли числа между числами, которые я указал?

Пример:

Долгота между 59.68000 и 59.85000

Широта между 5.510000 и 8.750000

это вывело бы 59.838314 6.865717

РЕДАКТИРОВАТЬ: показывает, что если бы попытался:

    foreach(Feed('https://www.vegvesen.no/trafikk/xml/savedsearch.rss?id=601') as $f ) {
      if (strpos($f->title, $title) !== false)
        if ($f->children('georss', true)->children('gml', true)->children('gml', true) >= 59.68000 && $f->children('georss', true)->children('gml', true)->children('gml', true) <= 59.85000) {
          echo $f->children('georss', true)->children('gml', true)->children('gml', true). "<br>";
        }
    }

Здесь я только проверьте на долголетие. Я хочу проверить оба.

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Я играл и нашел это как лучшее решение для моей проблемы:

    foreach(Feed('https://www.vegvesen.no/trafikk/xml/savedsearch.rss?id=601') as $f ) {
      if (strpos($f->title, $title) !== false){
        $pos = $f->children('georss', true)->children('gml', true)->children('gml', true);
        list($number1, $number2) = explode(' ', $pos);
          if ($number1 > 59.68000 && $number1 < 59.85000){
            if ($number2 > 5.510000 && $number2 < 8.750000){
             echo $f->children('georss', true)->children('gml', true)->children('gml', true). "<br>";
            }
          }
        }
      }
0 голосов
/ 25 февраля 2020

Сравнение значений с плавающей точкой в ​​PHP может быть проблематичным c. Вы можете использовать bccomp () для сравнения значений с плавающей запятой, если это то, что вы запрашиваете.

$a = '59.68000';
$b = '59.85000';
echo between($a, $b, '59.68001') . "\n"; // in range
echo between($a, $b, '59.68000') . "\n"; // exact match
echo between($a, $b, '59.88000') . "\n"; // higher than range
echo between($a, $b, '59.67000') . "\n"; // lower than range

function between($lower, $upper, $value)
{
    // Value is greater than lower bound of range
    $check1 = bccomp($value, $lower, 6) >= 0;
    // Value is less than upper bounds of range
    $check2 = bccomp($upper, $value, 6) >= 0;
    if ( $check1 && $check2 ) {
        return true;
    }
    return false;
}

Используйте функцию:

foreach(Feed('https://www.vegvesen.no/trafikk/xml/savedsearch.rss?id=601') as $f ) {
    if (strpos($f->title, $title) !== false) {
        $long = $f->children('georss', true)->children('gml', true)->children('gml', true);
        $lat = $f->lattitude_value(); // Replace me!!
        if ( between('59.68000', '59.85000', $long) && between('5.510000', '8.750000', $lat) ) {
            echo $long . ' ' . $lat . "<br>";
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...