という名前のテーブルgetinvolved
があり、このテーブルには明らかにさまざまなフィールドと値があります。そのようなものには名前が付けられThe Route
、コンマで区切られたテキストが含まれています。このために、それらはSpot 1, Spot 2, Spot
. はい、スペースは重要です。
ここで、私のコードでは、まずこの値をコンマに基づいて配列に分割します。Contentは、テキスト値$route = explode(",", $row['Content']);
を含む行の名前です。Spot 1, Spot 2, Spot
これはすべて正常に機能します。これをエコーしたところ、完全に表示されます。
次はトリッキーなビットです。ラベルが付けられているのではなく、ラベルThe Route
が付けられているエントリが他にも複数ありますRoute
。これは、可能な各スポットのエントリですが、現在のルートはSpot 1, Spot 2, Spot
常に に変更される可能性がありますSpot 2, Spot 1, Tops
。
考えられる各エントリには、独自の行があります: Name, Type, Content
. は設定Type
場所、 はスポットの名前、Google マップのストリート ビューでスポットを表示するための Google マップの URL を含みます。Route
Name
Content
私がやろうとしているのは、$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
as$sql
パスを通過し、最初と 2 番目のwhile
ループに入り、if($row['Name'] == $route[$i])
パーツに到達することだけです。if
ここでは、実際にステートメントに入るまで問題なく動作しているように見えます ( の値$row['Name']
は の値と同じです$route[$i]
)。
$total
エコーするように頼むと増加しますが、1回だけです。コードは終了し、次のように表示されます。
0 / 3
3
- は変数を
1
表し、$total
に従って 3 回通過する必要がありますwhile($total<$max)
。 /
読みやすくするためにセパレーターを追加しています。- は変数、または
3
は配列に含まれるスポットの総数です。$max
count($route)
$route
- 最後に末尾
3
は、その配列に 3 つの要素があることを知らせるcount()
関数です。$echoroute
最終的に、私の質問は、なぜ$total
2 に到達せず、必要に応じてループを終了しないのですか?
これを書くのに時間がかかったので、少し考えたことを理解していただければ幸いです。これは少し前に書いたもので、更新が必要であり、現在ここにいます。
編集:
これを今絞り込みました!いくつかのエコー関数を使用すると、最後の実行が始まるように見えますが、while ステートメントまでしか実行されません。実際には while ステートメントには入りません。現在、エコーされた 2 つの結果があり、最後の結果はたまたまテーブルの一番下にあります。これは while($row = statement が勝手に終了する前に使用される最後のものです。while ステートメントをトラップしているのでしょうか、それとも解放する必要があるのでしょうか? !