虽然Loop似乎无尽

时间:2013-09-18 12:24:38

标签: php mysql arrays if-statement while-loop

我有一个名为getinvolved的表,显然在这个表中有各种字段和值。其中一个名为The Route,包含以逗号分隔的文本。为此,我们会说它们是Spot 1, Spot 2, Spot。是的,空间很重要。

现在,在我的代码中,我首先将此值基于逗号分解为数组:$route = explode(",", $row['Content']); Content是包含Spot 1, Spot 2, Spot文本值的行的名称。这一切都很好,我已经回应了这一点,看起来很完美。

接下来是棘手的一点,我有多个其他条目而不是标记为The Route而是标记为Route。这是每个可能位置的条目,而当前路线为Spot 1, Spot 2, Spot,它可以始终更改为Spot 2, Spot 1, Tops

每个可能的条目都有自己的行:Name, Type, ContentType是设置Route的地方,Name是地点的名称,Content包含用于在Google地图街景视图中显示该地点的Google地图网址。

我要做的是获取当前包含$route[]的数组Spot 1, Spot 2, Spot并检查这些值与其他所有值。我创建了一个单独的数组$echoroute[],它包含了包含所有信息的实际路径。

我的代码如下:

$sql = mysqli_query($link, "SELECT * FROM getinvolved WHERE Type='Route'");
$echoroute = array_fill(0,count($route),""); #Gives $echoroute[] 3 empty elements as $route will always contain 3 elements at the moment.
$i = 0;
$max = count($route);

if($sql)
{
    foreach($route as $ii)
    {
        while($row = mysqli_fetch_assoc($sql))
        {
            if($row['Name'] == $ii)
            {
                $echoroute[$i] = "<a href='" . $row['Content'] . "' target='_blank'>" . $row['Name'] . "</a> --> ";
                echo $i . " / " . $max . "<br />";
                $i+=1;
                if($i==($max)) {break 2;} else {break 1;}
            }
        }
    }
}

我无法找出原因,但目前在运行此代码时,所有发生的事情都会通过if作为$sql次传递,它会进入第一个和第二个{{1}然后转到while部分。在它实际进入if($row['Name'] == $route[$i])语句之前似乎工作正常(if中的值等于$row['Name']中的值)。

$route[$i]增加了,因为我要求它回应它,但只有一次。代码结束并显示以下内容:

$total
  • 0 / 3 3 表示1变量,根据$total,该变量应经过3次。
  • while($total<$max)是我添加了一个便于阅读的分隔符。
  • /3变量,或$maxcount($route)数组中包含的总点数。
  • 最后跟踪$route3的{​​{1}}函数,让我知道该数组中有3个元素。

最终,我的问题是,为什么count()永远不会达到2并按我的要求完成循环?

这需要一段时间才能写出来,所以我希望你能理解我已经对此进行了一些思考,我刚才写了这篇文章,它需要一些更新,这就是我目前所处的位置。

编辑:
现在缩小了这个范围!使用几个echo函数,似乎最后一次运行开始,但只使它与while语句一样。它实际上从未进入while语句。目前我有两个echo'd结果,最后的结果恰好位于表的底部。这是在while之前使用的最后一个($ row =语句结束它自己的一致。我是否捕获了while语句或者我是否需要释放它或者什么?我真的很困惑并且非常接近于最后一块!

2 个答案:

答案 0 :(得分:1)

您使用$echoroute元素(在您的示例中为3)初始化count($route)

如果满足条件,则循环一个条件并增加$i$total的值。

此时,进入while循环,其中$total$i值为2(条件满足2 <3)并且如果他们输入if条件您获得3$i的{​​{1}}值,如果您$total,那么您就会收到错误,因为echo $echoroute[$i]是一个3元素数组,而您指向第四个元素(记住数组索引从0开始)。

我认为这就是为什么你没有得到预期的输出。

答案 1 :(得分:0)

我会这样写,因为有可能(遵循摩尔定律)$ total的循环永远不会结束

$sql = mysqli_query($link, "SELECT * FROM getinvolved WHERE Type='Route'");
$echoroute = array_fill(0,count($route),""); #Gives $echoroute[] 3 empty elements as $route will always contain 3 elements at the moment.
$i = 0;
$total = 0;
$max = count($route);

if($sql)
{
        while($row = mysqli_fetch_assoc($sql))
        {
            if($row['Name'] == $route[$i])
            {
                $echoroute[$i] = "<a href='" . $row['Content'] . "' target='_blank'>" . $row['Name'] . "</a> --> ";
                $i++;
                $total++;
                if ($total>$max) break;
                echo $total . " / " . $max . "<br />" . $echoroute[$i] . count($echoroute);
            }
    }
}