27

item1、item2、item13、item43 などの名前の多数のフィールドを含むフォームがありますが、これらのフィールドは AJAX を使用してフォームに入力されるため、毎回異なります。

ユーザーが送信するとき、次のことを実行する必要があります。

  foreach($_POST['itemX']['tagsX'] as $tag){
    inserttag($tag, X);
  }

どこで X = 1,2,13,43 など. $_POST 値を繰り返し処理し、名前が「item」で始まり、その後に X 識別子が続く値に対してのみ上記を実行するにはどうすればよいですか?

Piontek の回答に基づく解決策:

投稿データの形式は次のとおりです。

[item38] => Array([tags38] => Array([0] => aaa,[1] => bbb))
[item40] => Array([tags40] => Array([0] => ccc,[1] => ddd))
[item1] =>  Array([tags1] => Array([0] => eee,[1] => zzz))

そして、これが私がそれを解析して使用する方法です:

foreach($_POST as $key => $value){
    if (strstr($key, 'item')){
        $id = str_replace('item','',$key); 
        foreach($_POST['item'.$id]['tags'.$id] as $tag){
            inserttag($tag, $id);
        }   
    }
}
4

5 に答える 5

37
foreach($_POST as $key => $value)
{
    if (strstr($key, 'item'))
    {
        $x = str_replace('item','',$key);
        inserttag($value, $x);
    }
}
于 2013-01-09T20:16:10.080 に答える
5

$_POST次のforeachようにループできます。

foreach ($_POST as $key => $value) { ... }

また、ループ内で、ループによって見つかった各キーが基準に一致するかどうかを評価できます。このようなもの:

foreach ($_POST as $key => $value){
   if (substr($key, 0, 4) == "item") {
      $identifier = substr($key, 4);
      if (isset($value['tag' . $identifier])) { inserttag('tag', $identifier); }
   }
}

ただし、何が実際に本物で、何があなたの質問のプレースホルダーに過ぎないのか、100% 確信が持てません。たぶん、実際にはそうではない確固たる事実のために何かを取りました。あなたの希望をもっと詳しく説明する必要があるかもしれません。;)

于 2013-01-09T20:17:06.617 に答える
2

試す:

foreach($_POST as $key=>$value){
    inserttag($key, $value);
}

$key要素の名前に$valueなり、値になります。

于 2013-01-09T20:11:50.837 に答える
1

ループして$_POST、キーに が含まれているかどうかを確認します'item'

foreach($_POST as $key=>$value){
    if(preg_match('/item(\d*)/', $key, $match) === 1){
        inserttag($value, $match[1]);
    }
}
于 2013-01-09T20:15:26.723 に答える