Как получить массив неизвестных значений $ _GET в URL?

Я пользуюсь онлайн-магазином, который берет заказы и передает их уникальный идентификатор через URL-адрес на страницу process.php. Таким образом, URL-адрес будет выглядеть примерно так:

process.php?code_1=231&code_2=532&code_3=342 

Для каждого упорядоченного элемента создается другой code_x=xxx . На странице process.php, как мне создать массив, чтобы получить значения code_x не зная, сколько позиций заказано?

Related of "Как получить массив неизвестных значений $ _GET в URL?"

Эта проблема намного лучше решается путем изменения имен элементов в вашей форме на 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 } }