Обработка строки запроса - PullRequest
       1

Обработка строки запроса

4 голосов
/ 19 августа 2010

При выполнении некоторой обработки строки запроса я наткнулся на это:

<?php
$in='a=6&b=7&8=c';
parse_str($in,$qs);
$out=array_merge($qs,array('9'=>'d'));
print_r($out);
?>

Мы получаем:

Array
(
    [a] => 6
    [b] => 7
    [0] => c
    [1] => d
)

Вместо:

Array
(
    [a] => 6
    [b] => 7
    [8] => c
    [9] => d
)

Я понимаю, почемуэто происходит («8» и «9» обрабатываются как цифровые клавиши), но я не рад, что мне нужно делать это в обход.

Должен быть способ сделать это простым,Как нарезать, нарезать кубиками и готовить строки запроса?

Ответы [ 4 ]

2 голосов
/ 19 августа 2010

Рассмотрите возможность использования оператора UNION для массивов

$out=$qs+array('9'=>'d');
print_r($out);
1 голос
/ 19 августа 2010

Почему бы вам просто не сделать простой цикл над одним массивом и проверить ключ существует или нет?

Если оно существует, обновите значение, в противном случае добавьте новый элемент массива. Вот что я делаю, чтобы избежать подобных проблем.

1 голос
/ 19 августа 2010

Проблема в том, что array_merge нумерует числовые ключи так, чтобы они начинались с нуля (если вы var_dump ваш $qs массив до объединения, вы увидите, что есть ключ с именем 8). Либо не используйте цифровые клавиши, либо просто нажимайте прямо на массив вместо array_merge:

$in = 'a=6&b=7&8=c';
parse_str($in,$qs);
$out = $qs;
$out[9] = 'd';

Обратите внимание, что parse_str также имеет побочный эффект установки переменных в локальной области, поэтому после анализа строки запроса $a будет 6, а $b будет 7. Это может или не может быть желательным.

1 голос
/ 19 августа 2010

Я использую функцию http_build_query ().
И НИКОГДА не используйте числовые ключи для строки запроса / любых переменных запроса.

...