-1

次のような情報の「ブロック」を持つフォームからの配列があります

$array = array(id1 => 1
                title1 => this title
                id2 => 2
                title2 => this title 2)

私はそのように配列をループしようとしています

$num = 1;
$posid = "id" . $num;
while (array_key_exists($posid, $_POST)) {
    echo $posid . "<br>";
    $num++;
}

しかし、私は無限ループに陥り続けています。どこが間違っていますか?

4

3 に答える 3

1

$posid問題は、ループ内で再定義しないことです。これを行う必要があります:

$num = 1;
$posid = "id" . $num;
while (array_key_exists($posid, $_POST)) {
    echo $posid . "<br>";
    $num++;
    $posid = "id" . $num;
}

ただし、まったく異なるアプローチをお勧めします..次のような変数を投稿していることに気付いたときはいつでも:

id1
id2
id3
...

入力フィールドで配列アクセス表記を使用する方が適している可能性があります。

<input name="id[]" ... />

これにより、PHP はその名前を持つフィールドのすべての値を POST の配列に集約できます。

その後、次のようなことができます

foreach ($_POST['id'] as $id) {
   ...
}
于 2013-05-01T17:56:51.293 に答える
1

$posidインクリメント後に更新する必要があります$num

$num = 1;
$posid = "id" . $num;
while (array_key_exists($posid, $_POST)) {
    echo $posid . "<br>";
    $num++;
    $posid = "id" . $num;
}

フォーム フィールドに配列表記で名前を付けた方がよいでしょう<input name="id[]" ...>。次に$_POST['id']、個別の要素ではなく、配列になります。

于 2013-05-01T17:57:36.270 に答える
0

配列に存在する場合、配列から削除することはなく、問い合わせた変数の値を更新することもないため、無限ループに陥っています。

したがって、whileループが評価されるたびtrueに、同じ条件が繰り返しテストされるためです。

配列から $posid を削除するつもりですか? 更新するということですか?

于 2013-05-01T17:54:43.947 に答える