Pertanyaan Cara mendapatkan form input array ke dalam array PHP


Saya memiliki bentuk seperti yang di bawah ini yang diposting ke contacts.php, dan pengguna dapat secara dinamis menambahkan lebih banyak dengan 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[]" />

Jika saya echo mereka di php dengan kode di bawah ini

$name = $_POST['name'];
$email = $_POST['account'];

foreach( $name as $v ) {
print $v;
}

foreach( $email as $v ) {
print $v;
}

Saya akan mendapatkan sesuatu seperti ini:

name1name2name3email1email2email3

bagaimana saya bisa mendapatkan array tersebut menjadi sesuatu seperti kode di bawah ini

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);

jadi output saya seperti ini:

Namanya adalah nama1 dan email email1, Terima kasih
  Namanya adalah nama2 dan email email2, Terima kasih
  Namanya adalah nama3 dan email email3, Terima kasih

terima kasih atas bantuan atau saran


76
2017-07-23 00:35


asal


Jawaban:


Mereka sudah dalam array: $name adalah array, sebagaimana adanya $email

Jadi yang perlu Anda lakukan hanyalah menambahkan sedikit pemrosesan untuk menyerang kedua larik:

$name = $_POST['name'];
$email = $_POST['account'];

foreach( $name as $key => $n ) {
  print "The name is ".$n." and email is ".$email[$key].", thank you\n";
}

Untuk menangani lebih banyak input, cukup perpanjang polanya:

$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";
}

120
2017-07-23 00:39



Misalnya. dengan memberi nama bidang seperti

<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]" />

(yang juga mungkin saat menambahkan elemen melalui javascript)

Skrip php yang sesuai mungkin terlihat seperti

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);

38
2017-07-23 00:38



Bagaimana jika Anda memiliki array fieldsets?

<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>

Saya menambahkan bidang tersembunyi untuk menghitung jumlah fieldsets. Pengguna dapat menambah atau menghapus bidang dan kemudian menyimpannya.


2
2017-07-25 16:06



Saya tahu ini agak terlambat sekarang, tetapi Anda dapat melakukan sesuatu seperti ini:

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;
}

Tes dengan:

if (isset($_POST['submit'])) {
    var_dump(AddToArray($_POST));
}

Ini untuk saya menghasilkan:

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)

2
2017-07-10 14:30



Saya menemukan masalah ini juga. Diberikan 3 input: field [], field2 [], field3 []

Anda dapat mengakses setiap bidang ini secara dinamis. Karena setiap bidang akan berupa larik, bidang terkait semuanya akan berbagi kunci larik yang sama. Misalnya, data input yang diberikan:

  • Bob, bob@bob.com, laki-laki
  • Mark, mark@mark.com, pria

Bob dan email dan jenis kelaminnya akan berbagi kunci yang sama. Dengan pemikiran ini, Anda dapat mengakses data dalam lingkaran seperti ini:

    for($x = 0; $x < count($first_name); $x++ )
    {
        echo $first_name[$x];
        echo $email[$x];
        echo $sex[$x];
        echo "<br/>";
    }

Sisik ini juga. Yang perlu Anda lakukan adalah menambahkan var array Anda setiap kali Anda membutuhkan field baru untuk ditambahkan.


1
2018-01-07 13:43



Namun, solusi VolkerK adalah yang terbaik untuk menghindari kehilangan pasangan antara email dan nama pengguna. Jadi Anda harus menghasilkan kode HTML dengan PHP seperti ini:

<? foreach ($i = 0; $i < $total_data; $i++) : ?>
    <input type="text" name="name[<?= $i ?>]" />
    <input type="text" name="email[<?= $i ?>]" />
<? endforeach; ?>

Ubah $ total_data agar sesuai dengan kebutuhan Anda. Untuk menunjukkannya, seperti ini:

$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);

Dengan asumsi data dikirim menggunakan metode POST.


0
2017-07-23 06:30



Meskipun demikian, Anda dapat menggunakan kode di bawah ini sebagai,

$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>';
}

0
2018-04-13 10:33



Menggunakan metode ini seharusnya berfungsi:

$name = $_POST['name'];
$email = $_POST['account'];
while($explore=each($email)) {
    echo $explore['key'];
    echo "-";
    echo $explore['value'];
    echo "<br/>";
}

-2
2018-04-23 21:50