цикл через переменные $ _POST с похожими именами

У меня есть несколько переменных $ _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);