цикл через переменные $ _POST с похожими именами - PullRequest
3 голосов
/ 20 декабря 2011

У меня есть несколько переменных $ _POST, они

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

и т. Д.

Мне нужно написать цикл, который отображает значения всех переменных (я не знаюсколько их).Какой самый простой способ это сделать?Кроме того, что было бы самым простым способом, если бы я знал, сколько у меня переменных?

Ответы [ 7 ]

15 голосов
/ 20 декабря 2011

Отобразятся все параметры POST, имена которых начинаются с item_number:

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

Руководство по PHP: foreach(), strpos()

4 голосов
/ 20 декабря 2011

Если вы знаете, сколько у вас:

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

UPDATE: Если нет:

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

Получает все переменные POST, похожие на "item_number"

UPD 2 : изменено "==" на "===" из-за комментария piotrekkr. Спасибо

2 голосов
/ 20 декабря 2011

try:

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

В приведенном выше примере $ k будет ключом массива, а $ v будет значением.

1 голос
/ 20 декабря 2011

Если вы должны придерживаться тех имен переменных, как item_numberX

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

или

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

Лучше использовать функцию массива входных переменных php , если вы можете управлять именами ввода.

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

Затем php обрабатывает его в массив для вас.

print_r($_POST['item_number']);
1 голос
/ 20 декабря 2011

, если вы знаете количество переменных:

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

если вы не знаете номер:

<?php
$name = 'item_number';
foreach ($_POST as $key) {
  if (strpos($key, $name) > 0) {
    echo $_POST[$key];
  }
}
0 голосов
/ 01 сентября 2015

попробуй:

while (list($key,$value) = each($_POST))
   ${$key} = trim($value);
0 голосов
/ 20 декабря 2011
foreach($_POST as $k => $v) {
    if(preg_match("#item_number([0-9]+)#si", $k, $keyMatch)) {
        $number = $keyMatch[1];

        // ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...