0

私は持っている:

<form action="save.php" method="POST">
<input type="text" name="test[one][]" value="a"><input type="text" name="test[two][]"  value="a"> <br />
<input type="text" name="test[one][]" value="s"><input type="text" name="test[two][]"  value="s"><br />
<input type="text" name="test[one][]"  value="d"><input type="text" name="test[two][]"  value="d"><br />
<input type="text" name="test[one][]"  value="f"><input type="text" name="test[two][]"  value="f"><br />
<input type="text" name="test[one][]"  value="g"><input type="text" name="test[two][]"  value="g"><br />

<input type="submit">
</form>

データベースには次のものがあります。

 Table:
 id | one | two

PHPで私は作りたい:

if($_POST){
   foreach($_POST['test'] as $post){
          $new = new Table();
          $new->setOne($post['one']);
          $new->setTwo($post['two']);
          $new->save(); 
   }
}

しかし、これは機能しません...インデックス「1」と「2」にPOSTを使用できません-2つのループforeachを使用する必要があります。1つの foreach または foreach で foreach を作成することは可能ですか?

print_r($_POST) 戻ります:

[test] => Array ( [one] => Array ( [0] => a [1] => s [2] => d [3] => f [4] => g ) [two] => Array ( [0] => a [1] => s [2] => d [3] => f [4] => g ) ) ) 
4

2 に答える 2

3

私はこのように行きます:

if (!empty($_POST)) {
  // now $_POST['test'] is array('one' => array(), 'two' => array()
  for ($i = 0, $c = count($_POST['test']['one']); $i < $c; ++$i) {
    $new = new Table();
    $new->setOne($_POST['test']['one'][$i]);
    $new->setTwo($_POST['test']['two'][$i]);
    $new->save();
  }
}
于 2012-09-09T13:25:57.027 に答える
0
if(is_array($_POST['test'])){ // also check that the user submitted an array
   foreach($_POST['test'] as $post){
          $new = new Table();
          foreach ($post['one'] as $item) { // $post['one'] and $post['two'] should have the same number of elements so looping through $post['one'] is sufficient to get entries for $post['two']
              $new->setOne($item);
              $new->setTwo($item);
              $new->save(); // each item is saved in the database now
          }
   }
}
于 2012-09-09T13:26:07.673 に答える