Contacts.phpに投稿される以下のようなフォームがあり、ユーザーはjqueryで動的に追加できます。
<input type="text" name="name[]" />
<input type="text" name="email[]" />
<input type="text" name="name[]" />
<input type="text" name="email[]" />
<input type="text" name="name[]" />
<input type="text" name="email[]" />
以下のコードを使用してPHPでそれらをエコーアウトする場合
$name = $_POST['name'];
$email = $_POST['account'];
foreach( $name as $v ) {
print $v;
}
foreach( $email as $v ) {
print $v;
}
私はこのようなものを手に入れます:
name1name2name3email1email2email3
これらの配列を以下のコードのようなものにするにはどうすればよいですか
function show_Names($n, $m)
{
return("The name is $n and email is $m, thank you");
}
$a = array("name1", "name2", "name3");
$b = array("email1", "email2", "email3");
$c = array_map("show_Names", $a, $b);
print_r($c);
したがって、私の出力は次のようになります。
名前は name1 そしてメールは email1、 ありがとうございました
名前は name2 そしてメールは email2、 ありがとうございました
名前は 名前3 そしてメールは email3、 ありがとうございました
助けやアドバイスをありがとう
それらはすでに配列にあります:$name
は$email
と同様に配列です
したがって、必要なことは、両方のアレイを攻撃するために少し処理を追加することだけです。
$name = $_POST['name'];
$email = $_POST['account'];
foreach( $name as $key => $n ) {
print "The name is ".$n." and email is ".$email[$key].", thank you\n";
}
より多くの入力を処理するには、パターンを拡張するだけです:
$name = $_POST['name'];
$email = $_POST['account'];
$location = $_POST['location'];
foreach( $name as $key => $n ) {
print "The name is ".$n.", email is ".$email[$key].
", and location is ".$location[$key].". Thank you\n";
}
例えば。次のようなフィールドに名前を付けることにより
<input type="text" name="item[0][name]" />
<input type="text" name="item[0][email]" />
<input type="text" name="item[1][name]" />
<input type="text" name="item[1][email]" />
<input type="text" name="item[2][name]" />
<input type="text" name="item[2][email]" />
(javascriptを介して要素を追加するときにも可能です)
対応するphpスクリプトは次のようになります
function show_Names($e)
{
return "The name is $e[name] and email is $e[email], thank you";
}
$c = array_map("show_Names", $_POST['item']);
print_r($c);
少し遅くなりましたが、次のようなことができます。
function AddToArray ($post_information) {
//Create the return array
$return = array();
//Iterate through the array passed
foreach ($post_information as $key => $value) {
//Append the key and value to the array, e.g.
//$_POST['keys'] = "values" would be in the array as "keys"=>"values"
$return[$key] = $value;
}
//Return the created array
return $return;
}
次のテスト:
if (isset($_POST['submit'])) {
var_dump(AddToArray($_POST));
}
私にとってこれは生産した:
array (size=1)
0 =>
array (size=5)
'stake' => string '0' (length=1)
'odds' => string '' (length=0)
'ew' => string 'false' (length=5)
'ew_deduction' => string '' (length=0)
'submit' => string 'Open' (length=4)
フィールドセットの配列がある場合はどうなりますか?
<fieldset>
<input type="text" name="item[1]" />
<input type="text" name="item[2]" />
<input type="hidden" name="fset[]"/>
</fieldset>
<fieldset>
<input type="text" name="item[3]" />
<input type="text" name="item[4]" />
<input type="hidden" name="fset[]"/>
</fieldset>
非表示フィールドを追加して、フィールドセットの数をカウントしました。ユーザーはフィールドを追加または削除してから保存できます。
私もこの問題に出会いました。 3つの入力がある場合:field []、field2 []、field3 []
これらの各フィールドに動的にアクセスできます。各フィールドは配列であるため、関連するフィールドはすべて同じ配列キーを共有します。たとえば、与えられた入力データ:
ボブと彼のメールと性別は同じキーを共有します。これを念頭に置いて、次のようなforループでデータにアクセスできます。
for($x = 0; $x < count($first_name); $x++ )
{
echo $first_name[$x];
echo $email[$x];
echo $sex[$x];
echo "<br/>";
}
これも同様にスケーリングします。必要なことは、新しいフィールドを追加する必要がある場合は、それぞれの配列変数を追加することだけです。
ただし、VolkerKのソリューションは、電子メールとユーザー名の間のカップルを見逃さないようにするのに最適です。したがって、次のようにPHPを使用してHTMLコードを生成する必要があります。
<? foreach ($i = 0; $i < $total_data; $i++) : ?>
<input type="text" name="name[<?= $i ?>]" />
<input type="text" name="email[<?= $i ?>]" />
<? endforeach; ?>
ニーズに合わせて$ total_dataを変更します。表示するには、次のようにします。
$output = array_map(create_function('$name, $email', 'return "The name is $name and email is $email, thank you.";'), $_POST['name'], $_POST['email']);
echo implode('<br>', $output);
POSTメソッドを使用してデータが送信されたと仮定します。
それにもかかわらず、以下のコードを次のように使用できます。
$a = array('name1','name2','name3');
$b = array('email1','email2','email3');
function f($a,$b){
return "The name is $a and email is $b, thank you";
}
$c = array_map('f', $a, $b);
//echoing the result
foreach ($c as $val) {
echo $val.'<br>';
}
これは簡単です:
foreach( $_POST['field'] as $num => $val ) {
print ' '.$num.' -> '.$val.' ';
}