首页 > 解决方案 > 在 PHP 中跳出循环并重置计数器

问题描述

我的代码中有一些逻辑错误,我不确定我在这里做错了什么。

首先进行设置,我有一个正在阅读的 .json 文件,该文件位于此布局中:

在此处输入图像描述

因此,多边形元素位于每 1、3、5、.. 处,而学校名称在此之前是一个。

现在我有另一个 .csv 文件,我从中获取不同的 lat 和 long 值。基本上,我必须查看 csv 文件中的 lat long 是否在 json 文件中描述的任何这些多边形内。

这是我接受 json 文件和 csv 文件的 PHP 代码的一部分。我的逻辑是,我从 CSV 中获取一个经纬度值,然后想要遍历 json 文件中的每个多边形。

如果你按照下面的代码,我会接受这些值,当我满足它在多边形之外的条件时,它就会跳出第二个 while 循环,采用另一组纬度和经度。

$string = file_get_contents("Schools.json", 0, null, null);
    $json_a = json_decode($string, true);

    $start_row = 4;
    $rowID = 1;
    $polygonIndex = 1;
    $insideCheck = 0;
    $file = fopen("ActiveProperty.csv", "r");
    while (($row = fgetcsv($file)) !== FALSE){
        if($rowID >= $start_row){
            $points = array($row[52] . ' ' . $row[49]);
            $polygonIndex = 1;
            while ($polygonIndex < 454){
                $polygon = $json_a[$polygonIndex]['Polygons'];
                foreach($points as $key => $point) {
                    if ($pointLocation->pointInPolygon($point, $polygon) == "outside"){
                        echo "point " . ($key+1) . " ($point): " . $pointLocation->pointInPolygon($point, $polygon);
                        echo "<br>";
                        $polygonIndex = $polygonIndex + 2;
                        echo $polygonIndex;
                        $insideCheck = 0;
                        break;
                    }
                    else {
                        echo $json_a[$polygonIndex - 1];
                        echo "<br>";
                        echo "point " . ($key+1) . " ($point): " . $pointLocation->pointInPolygon($point, $polygon);
                        echo "<br>";
                        $insideCheck = 1;
                        break;
                    }
                }
                if ($insideCheck = 0) {
                    echo "out of foreach 0";
                    continue;
                }
                else {
                    echo "out of foreach";
                    $insideCheck = 0;
                    break;
                }
            }
        }
        $rowID++;
    }

这是我的示例输出:

在此处输入图像描述

此图像中的经纬度来自 csv 文件。

预期的输出应该是经纬度,它应该越过 json 中的多边形,如果它在里面,则返回第一个元素,即学校。这里 $polygonIndex 只是保持 3 我猜这是问题所在。

如果这仍然不清楚我要做什么,请告诉我。谢谢。

标签: php

解决方案


推荐阅读