1

我有一个名为的表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, Content. TypeRoute设置的位置,Name是地点的名称,并Content包含用于在 Google 地图街景视图中显示地点的 Google 地图 URL。

我正在尝试做的是获取我$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;}
            }
        }
    }
}

我不知道为什么,但目前在运行此代码期间,所有发生的事情都是它将通过ifas $sqlpass,进入第一个和第二个while循环,然后到达该if($row['Name'] == $route[$i])部分。if在它实际进入语句之前,它似乎工作正常( in 的值$row['Name']等于in 的值$route[$i])。

$total在我要求它回应它的地方增加,但只有一次。代码结束并显示以下内容:

0 / 3
3
  • 1代表变量,根据$total,应该经过 3 次while($total<$max)
  • /是我添加一个分隔符以便于阅读。
  • 是变量,或者3是数组中包含的点的总数。$maxcount($route)$route
  • 最后,尾随3是让我知道该数组中有 3 个元素的count()功能。$echoroute

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

这花了一些时间来写,所以我希望你明白我已经对此进行了一些思考,我前一段时间写了这个,它需要一些更新,这就是我目前所处的位置。

编辑:
现在已经缩小了范围!使用几个 echo 函数,似乎最后一次运行开始了,但只进行到 while 语句。它从未真正进入 while 语句。目前我有两个结果,最后一个结果恰好在表格的底部。它是在 while($row = 语句自动结束之前使用的最后一个。我是在捕获 while 语句还是需要释放它或其他什么?我真的很困惑,离最后一块很近!

4

2 回答 2

1

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

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

此时,进入 while 循环 where$total$ivalues 2( while 条件满足 2 < 3 ),如果他们进入if条件你得到3$i$total如果你echo $echoroute[$i]得到一个错误,因为$echoroute是一个 3 元素数组和您指向第四个元素(请记住数组索引从 0 开始)。

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

于 2013-09-18T12:50:55.780 回答
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);
            }
    }
}
于 2013-09-18T12:53:15.143 回答