Bagaimana memasukkan array input form ke dalam array PHP

92

Saya memiliki formulir seperti di bawah ini yang diposting ke contacts.php, dan pengguna dapat menambahkan lebih banyak secara dinamis 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 menggemakannya 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 keluaran saya seperti ini:

Namanya name1 dan emailnya email1 , terima kasih
Namanya name2 dan emailnya email2 , terima kasih
Namanya name3 dan emailnya email3 , terima kasih

terima kasih atas bantuan atau sarannya

thom
sumber

Jawaban:

146

Mereka sudah ada dalam array: $nameis an array, as is$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";
}
Jeffrey Blake
sumber
terima kasih, bagaimana jika saya menambahkan masukan lain seperti lokasi [], bagaimana saya bisa menambahkannya juga?
thom
1
Pada dasarnya, Anda hanya perlu memperpanjang polanya. Lihat hasil edit saya di atas ... input tambahan juga akan menjadi array ketika Anda menetapkannya dari $ _POST (dengan asumsi ada beberapa input dengan nama itu di html, seperti yang Anda lakukan dengan bidang ini).
Jeffrey Blake
1
Jeffrey, aku ingin tahu apakah aku bisa mempercayai urutan array. Yaitu, apakah kami yakin itu $emails[1]sesuai dengan nama pengguna $name[1]? Saya pikir saya mengalami masalah dengan ini di masa lalu tetapi saya mungkin salah. Terima kasih
idrarig
1
@bruciasse - Cara server menangani larik input seperti ini akan bervariasi dari satu server web ke server web lainnya (OS yang berbeda menerapkan hal-hal yang berbeda dalam hal detail terperinci seperti ini), namun setiap platform tempat saya menggunakan teknik ini konsisten di dalam sendiri (yaitu urutannya sama setiap saat). Ada kemungkinan bahwa browser dapat mencampur urutan variabel permintaan sebelum meneruskan permintaan ke server, tetapi saya berharap ini cukup tidak biasa. Masalah terakhir yang mungkin Anda hadapi adalah bahwa html dicampur dalam urutan yang aneh dan penyesuaian CSS
Jeffrey Blake
... posisi. Jika halaman Anda seperti itu, pasti akan melihat beberapa masalah aneh w / r / t urutan array.
Jeffrey Blake
52

Misal dengan memberi nama pada field like

<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 dimungkinkan saat menambahkan elemen melalui javascript)

Skrip php yang sesuai mungkin terlihat seperti ini

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);
VolkerK
sumber
4

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)
Can O 'Spam
sumber
2

Bagaimana jika Anda memiliki berbagai fieldets?

<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 kumpulan bidang. Pengguna dapat menambah atau menghapus bidang dan kemudian menyimpannya.

Sophia Gavish
sumber
2

Saya menemukan masalah ini juga. Diberikan 3 masukan: bidang [], bidang2 [], bidang3 []

Anda dapat mengakses setiap bidang ini secara dinamis. Karena setiap bidang akan menjadi larik, semua bidang terkait akan berbagi kunci larik yang sama. Misalnya, data masukan yang diberikan:

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

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

Skala ini juga. Yang perlu Anda lakukan adalah menambahkan vars array Anda setiap kali Anda membutuhkan kolom baru untuk ditambahkan.

thatonefreeman
sumber
0

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.

iroel
sumber
0

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>';
}
Abhishek Gurjar
sumber
0

Ini mudah:

foreach( $_POST['field'] as $num => $val ) {
      print ' '.$num.' -> '.$val.' ';
    }
Ian
sumber
-4

Menggunakan metode ini seharusnya berhasil:

$name = $_POST['name'];
$email = $_POST['account'];
while($explore=each($email)) {
    echo $explore['key'];
    echo "-";
    echo $explore['value'];
    echo "<br/>";
}
Raphael Gates
sumber
Jelaskan jawaban Anda langkah demi langkah
krisdestruction