2012-01-28 1 views
-1

Можно создать дубликат:
Parse query string into an arrayКак взорвать строку списка параметров URL в парном [key] => [значение] Массив?

Как я могу взорваться строку, такие как:

a=1&b=2&c=3 

Так что становится:

Array { 
[a] => 1 
[b] => 2 
[c] => 3 
} 

Использование обычной функции explode(), разделенной на &, будет разделять параметры, но не в [key] => [value] парах.

Спасибо.

+0

И http://stackoverflow.com/questions/8643938/php-fastest-method-to-parse-url-params- в-переменных. Тон этих вопросов. – kba

ответ

16

Используйте функцию PHP parse_str.

$str = 'a=1&b=2&c=3'; 
$exploded = array(); 
parse_str($str, $exploded); 
$exploded['a']; // 1 

Интересно, откуда вы взяли эту строку? Если это часть URL после знака вопроса (Строка запроса из URL), вы уже можете получить доступ к нему через суперглобальный $_GET массива:

# in script requested with http://example.com/script.php?a=1&b=2&c=3 
$_GET['a']; // 1 
var_dump($_GET); // array(3) { ['a'] => string(1) '1', ['b'] => string(1) '2', ['c'] => string(1) '3') 
+0

Спасибо за прекрасный ответ. Проблема, которую я получаю с $ _GET, заключается в том, что она возвращает больше параметров, чем на самом деле содержится в URL-адресе, поэтому я получаю фактический список параметров URL из $ _SERVER ['argv'] [0] вместо этого, но он приходит в виде строки, а не массива. – ProgrammerGirl

+0

@Programmer Не могли бы вы уточнить? После использования 'parse_str ($ _ SERVER ['argv'], $ args)', '$ _GET' и' $ args' должны содержать то же самое. – kba

+0

@ Kristian, не так много, чтобы уточнить, '$ _GET' и' parse_str ($ _ SERVER ['argv'], $ args) 'дают разные результаты. 'parse_str ($ _ SERVER ['argv'], $ args)' фактически соответствует тому, что находится в URL-адресе в браузере, а '$ _GET' содержит дополнительные параметры, не содержащиеся в фактическом URL-адресе. – ProgrammerGirl

2

Попробуйте использовать parse_str() функции:

$str = "first=value&arr[]=foo+bar&arr[]=baz"; 
parse_str($str, $output); 
echo $output['first']; // value 
echo $output['arr'][0]; // foo bar 
echo $output['arr'][1]; // baz 
-1

Что-то, как это будет работать

$str = "a=1&b=2&c=3" 
$array = array(); 
$elems = explode("&", $str); 
foreach($elems as $elem){ 
    $items = explode("=", $elem); 
    $array[$items[0]] = $items[1]; 
} 
+0

Повторное изобретательство колеса не всегда является лучшим решением ... особенно если язык уже обеспечивает хорошо проверенную функцию для проблемы. – knittl

+1

Дополнительное повторное изобретательство колеса обычно означает, что вы что-то забываете. Например, здесь вы забыли 'urldecode()' – KingCrunch

+1

@KingCrunch: при всей справедливости OP не упомянул об этом существовании для URL-адреса, поэтому использование 'urldecode()' может быть неправильным поведением. Вряд ли, но правдоподобно. :-) – FtDRbwLXw6