我有一个名为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
。 Type
是设置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
变量,或$max
,count($route)
数组中包含的总点数。$route
是3
的{{1}}函数,让我知道该数组中有3个元素。最终,我的问题是,为什么count()
永远不会达到2并按我的要求完成循环?
这需要一段时间才能写出来,所以我希望你能理解我已经对此进行了一些思考,我刚才写了这篇文章,它需要一些更新,这就是我目前所处的位置。
编辑:
现在缩小了这个范围!使用几个echo函数,似乎最后一次运行开始,但只使它与while语句一样。它实际上从未进入while语句。目前我有两个echo'd结果,最后的结果恰好位于表的底部。这是在while之前使用的最后一个($ row =语句结束它自己的一致。我是否捕获了while语句或者我是否需要释放它或者什么?我真的很困惑并且非常接近于最后一块!
答案 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);
}
}
}