1

PHP でカンマ区切りのリストをループしようとすると、非常に奇妙な結果が得られます。

それらのいくつかしか出力しないことがあり、それらすべてをループしない理由には論理的な理由がないように思われ、実際に何が原因であるかを一生理解することはできません。

私のコードは次のとおりです。

    //pids = &pids=1,2,3,6,7,9
    $pids = $_GET['pids'];
    $photoIdArray = explode(",", $pids);


    for($i = 0; $i <= count($photoIdArray); $i++) {

        foreach($photoIdArray as $j){
            if($i == $j){

                echo "{$j}";

            }
        }

    }

    // result = 1236

これはテスト用であるため、エクスプロイトを防ぐために入力をチェックしていませんが、現時点ではそうではありません。

どんな助けでも大歓迎です。

ありがとう!

4

3 に答える 3

3

2つのループforを組み合わせるとforeach、このようなものにはやり過ぎです

のみを使用してみてくださいforeach

$pids = "1,2,3,6,7,9";
$photoIdArray = explode(",", $pids);
foreach($photoIdArray as $value)
{
    echo $value;
}

出力

 123679
于 2012-10-07T16:23:29.453 に答える
0

Dusan、Baba&Co.に同意しますが、実際の質問に答えるには:

ここでは奇妙なことは何も起こりません。i は 0 から 6 までループし (ただし、配列にはインデックス 0..5 しかありません)、i を 1 から 9 の範囲の配列の VALUES と比較します。もちろん、値 1 から 6 のみが一致します。私は決して6を超えません。

編集: Asad と Sietse はより高速でした。

于 2012-10-07T16:31:49.303 に答える
0

これは、値をループして $i が値と同じかどうかを確認しているためです。チェックする必要があります

if ($photoIdArray[$i] == $j) {

それ以外の

if ($i == $j) {

これがうまくいかなかった理由ですが、それでもババの方法を使用する必要があります。

于 2012-10-07T16:29:41.127 に答える