loop melalui variabel $_POST dengan nama yang mirip

Saya memiliki beberapa variabel $_POST, yaitu

$_POST['item_number1']
$_POST['item_number2']

dan seterusnya

Saya perlu menulis loop yang menampilkan nilai semua variabel (saya tidak tahu berapa jumlahnya). Apa cara paling sederhana untuk melakukannya? Juga apa cara paling sederhana jika saya mengetahui berapa banyak variabel yang saya miliki?


person Natalia    schedule 19.12.2011    source sumber
comment
Apakah Anda mendapatkan nilai-nilai ini dari formulir? Bisa menggunakan gaya array formulir yang dikirimkan dengan menyetel elemen formulir ke: gaya name='item_number[]' sehingga Anda bisa mengulang satu array itu dalam variabel $_POST.   -  person Blake    schedule 20.12.2011


Jawaban (6)


Ini akan menggemakan semua parameter POST yang namanya dimulai dengan item_number:

foreach($_POST as $k => $v) {
    if(strpos($k, 'item_number') === 0) {
        echo "$k = $v";
    }
}

Panduan PHP: foreach(), strpos()

person Rob Hruska    schedule 19.12.2011

Jika Anda tahu berapa banyak yang Anda miliki:

for ($i=0; $i < $num_of_vars; $i++)
    echo $_POST['item_number'.$i]."<br />";

PEMBARUAN: Jika tidak:

foreach($_POST as $k => $v) {
    $pos = strpos($k, "item_number");
    if($pos === 0)
        echo $v."<br />";
}

Mendapatkan semua variabel POST seperti "item_number"

UPD 2: Mengubah "==" menjadi "===" karena komentar piotrekkr. Terima kasih

person SlavaNov    schedule 19.12.2011
comment
Anda harus menggunakan if($pos === 0) karena strpos() mengembalikan 0 ketika jarum berada di awal string dan false ketika jarum tidak ditemukan. - person piotrekkr; 20.12.2011

mencoba:

foreach($_POST as $k => $v)
{
    if(strpos($k, 'item_number') === 0)
    {
        echo "$k = $v";
    }
}

Dalam contoh di atas, $k akan menjadi kunci array dan $v akan menjadi nilainya.

person ghstcode    schedule 19.12.2011
comment
ada variabel $_POST lainnya juga, saya hanya perlu variabel yang dimulai dengan item_number - person Natalia; 20.12.2011
comment
Saya pikir yang diinginkan @Natalia adalah item_number ada di awal kunci, jadi harus ada strpos($k, 'item_number') === 0 - person piotrekkr; 20.12.2011

jika Anda mengetahui jumlah variabel:

<?php
$n = 25; // the max number of variables
$name = 'item_number';  // the name of variables
for ($i = 1; $i <= $n; $i++) {
  if (isset($_POST[$name . $i])) {
    echo $_POST[$name . $i];
  }
}

jika Anda tidak tahu nomornya:

<?php
$name = 'item_number';
foreach ($_POST as $key) {
  if (strpos($key, $name) > 0) {
    echo $_POST[$key];
  }
}
person macjohn    schedule 19.12.2011

Jika Anda harus tetap menggunakan nama variabel seperti item_numberX

foreach (array_intersect_key($_POST, preg_grep('#^item_number\d+$#D', array_keys($_POST))) as $k => $v) {
    echo "$k $v \n";
}

or

foreach (new RegexIterator(new ArrayIterator($_POST), '#^a\d+$#D', null, RegexIterator::USE_KEY) as $k => $v) {
    echo "$k $v \n";
}

Lebih baik menggunakan fitur array variabel input php, jika Anda dapat mengontrol nama input.

<input name="item_number[]">
<input name="item_number[]">
<input name="item_number[]">

kemudian php memprosesnya menjadi array untuk Anda.

print_r($_POST['item_number']);
person goat    schedule 19.12.2011

mencoba:

while (list($key,$value) = each($_POST))
   ${$key} = trim($value);
person user3472684    schedule 01.09.2015