1

という名前のテーブル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 を含みます。RouteNameContent

私がやろうとしているのは、$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$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は配列に含まれるスポットの総数です。$maxcount($route)$route
  • 最後に末尾3は、その配列に 3 つの要素があることを知らせるcount()関数です。$echoroute

最終的に、私の質問は、なぜ$total2 に到達せず、必要に応じてループを終了しないのですか?

これを書くのに時間がかかったので、少し考えたことを理解していただければ幸いです。これは少し前に書いたもので、更新が必要であり、現在ここにいます。

編集:
これを今絞り込みました!いくつかのエコー関数を使用すると、最後の実行が始まるように見えますが、while ステートメントまでしか実行されません。実際には while ステートメントには入りません。現在、エコーされた 2 つの結果があり、最後の結果はたまたまテーブルの一番下にあります。これは while($row = statement が勝手に終了する前に使用される最後のものです。while ステートメントをトラップしているのでしょうか、それとも解放する必要があるのでしょうか? !

4

2 に答える 2

1

要素で初期化$echorouteします(例では3)。count($route)

$i条件をループし、条件が満たされた場合にandの値を増やします$total

この時点で、 while ループに入り$total$i値は2( while condition is met 2 < 3 ) であり、それらがif条件に入った場合は値を取得し3$iは3 要素配列であるため、エラーが発生します。4 番目の要素を指しています (配列インデックスは 0 から始まることに注意してください)。$totalecho $echoroute[$i]$echoroute

これが、期待される出力が得られない理由だと思います。

于 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 に答える