У меня есть несколько переменных $ _POST, они
$_POST['item_number1'] $_POST['item_number2']
и так далее
Мне нужно написать цикл, который отображает значения всех переменных (я не знаю, сколько их есть). Что было бы самым простым способом? И каким будет самый простой способ, если я знаю, сколько переменных у меня есть?
Это будет item_number
все параметры POST, имена которых начинаются с item_number
:
foreach($_POST as $k => $v) { if(strpos($k, 'item_number') === 0) { echo "$k = $v"; } }
Руководство PHP: foreach()
, strpos()
Если вы знаете, сколько у вас есть:
for ($i=0; $i < $num_of_vars; $i++) echo $_POST['item_number'.$i]."<br />";
ОБНОВЛЕНИЕ: Если нет:
foreach($_POST as $k => $v) { $pos = strpos($k, "item_number"); if($pos === 0) echo $v."<br />"; }
Получает все переменные POST, которые похожи на "item_number"
UPD 2 : Изменено «==» до «===» из-за комментария piotrekkr. благодаря
пытаться:
foreach($_POST as $k => $v) { if(strpos($k, 'item_number') === 0) { echo "$k = $v"; } }
В приведенном выше примере $ k будет ключом массива, а значение $ v будет значением.
если вы знаете количество переменных:
<?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]; } }
Если вы должны придерживаться таких имен переменных, как 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']);
foreach($_POST as $k => $v) { if(preg_match("#item_number([0-9]+)#si", $k, $keyMatch)) { $number = $keyMatch[1]; // ... } }
пытаться:
while (list($key,$value) = each($_POST)) ${$key} = trim($value);