Я пользуюсь онлайн-магазином, который берет заказы и передает их уникальный идентификатор через URL-адрес на страницу process.php. Таким образом, URL-адрес будет выглядеть примерно так:
process.php?code_1=231&code_2=532&code_3=342
Для каждого упорядоченного элемента создается другой code_x=xxx
. На странице process.php, как мне создать массив, чтобы получить значения code_x
не зная, сколько позиций заказано?
Эта проблема намного лучше решается путем изменения имен элементов в вашей форме на code[]
.
Например, где вы сейчас скажем
<input type="text" name="code_1" ... /> <input type="text" name="code_2" ... /> <input type="text" name="code_3" ... />
Вы изменили бы это на
<input type="text" name="code[]" ... /> <input type="text" name="code[]" ... /> <input type="text" name="code[]" ... />
После этого $_GET['code']
будет массивом, который содержит все значения из текстовых полей в качестве своих элементов.
Обновить:
Если вы не можете управлять именами входящих параметров, вам нужно разобрать вручную. Вот как я это сделаю:
// Sample data $get = array('code_1' => 'foo', 'code_2' => 'bar', 'code_X' => 'X', 'asdf' => 'X'); $codes = array(); foreach($get as $k => $v) { // Reject items not starting with prefix if (substr($k, 0, 5) != 'code_') { continue; } // Reject items like code_X where X is not all digits $k = substr($k, 5); if (!ctype_digit($k)) { continue; } $codes[$k] = $v; } print_r($codes);
Было бы гораздо лучше использовать массив, как предположил Джон .
Это также было бы чище, чтобы не использовать get
для этого. Но скорее post
.
Однако, если вы действительно хотите пройти этот маршрут, вы можете сделать:
foreach($_GET as $name=>$value) { if (strpos($name, 'code_') !== 0) continue; // here are the names and values of the items }
Однако снова: я бы не рекомендовал его.
print_r($_GET); foreach($_GET as $key=>$val) { echo '<br />'; echo $key.' : '.$val; }
Вам нужно пройти через $ _GET и искать имена.
foreach(!empty($_GET as $name=>$value)) { // Check for match names for your if (preg_match('/^code_[1-9]$/', $name)) { // Do whatever with values } }