PHP изменить формат массива для URL - PullRequest
4 голосов
/ 25 мая 2011

У меня есть странный проект, над которым я работаю. Я совершенно новичок в php, так что до сих пор это была борьба.

У меня есть форма, которая дает массив и публикует его:

...
return($keywords);
}

$keywordlist = explode("\r\n", $keywordlist);
foreach($keywordlist as $keyword){
print_r(mixer(strtolower($keyword)));
}

Я понял:

Array ( [0] => one [1] => two [2] => three [3] => four [4] => five [5] => six [6] => ....

Но хотелось бы, чтобы это выглядело так:

%28one%2Ctwo%2Cthree%2Cfour%2Cfive%2Csix%29

В конечном счете, мы надеемся, что сможем прикрепить его к концу URL-адреса, например, по запросу ask.com:

"http://www.ask.com/web?q=(put my keywords here)"

затем перейдите туда

Теоретически это было бы, как если бы я набрал "(один, два, три, четыре, пять, шесть)" в строке поиска и нажал клавишу ввода.

Надеюсь, это имеет какой-то смысл.

Ответы [ 7 ]

7 голосов
/ 25 мая 2011

Примерно так:

$commaSeparated = implode(',', $array);
$withParens = '(' + $commaSeparated + ')';
$urlEncoded = urlencode($withParens);
print $urlEncoded;
3 голосов
/ 25 мая 2011

Используйте функцию php implode () .

Чтобы вы могли сделать это:

$array = new array ( [0] => one [1] => two [2] => three [3] => four [4] => five [5] => six );
$string = '%28'.implode( '%2C', $array ).'%29';

Теперь $string будет тем, что вам нужно

2 голосов
/ 25 мая 2011

Как то так?

$input = array('one', 'two', 'three');
$s = implode(',', $input);
$s = '('.$i.')';
print urlencode($s);
2 голосов
/ 25 мая 2011

Этот код:

$keywords = array('one', 'two', 'three');
$query = '(' . implode(',', $keywords) . ')';
echo('Search query: ' . $query . PHP_EOL);
$query = rawurlencode($query);
echo('Encoded: ' . $query . PHP_EOL);

Дает этот вывод:

Поисковый запрос: (один, два, три) Кодированный: % 28one% 2Ctwo% 2Cthree% 29

2 голосов
/ 25 мая 2011

print_r - это то, что печатает ваш массив следующим образом.

http://php.net/manual/en/function.print-r.php

Как ее решить, зависит от нескольких вещей. Что делает mixer()? И всегда ли ключевые слова в нижнем регистре? Если миксер мало что делает, а ключевые слова в нижнем регистре, вы можете сделать что-то вроде:

$ string = '% 28'. взрывать ( '% 2C', $ ключевое слово). '% 29';

Если вы используете кодировку URL, вы можете использовать функцию url_encode вместо ручного добавления закодированных значений, как указано выше.

2 голосов
/ 25 мая 2011
$keywordlist = explode("\r\n", $keywordlist);    
array_walk($keywordlist, 'strtolower');
$keywords = '('.implode(",", $keywordList).')';
1 голос
/ 25 мая 2011

Вы можете закодировать каждую часть массива, используя urlencode, а затем вручную поместить его в свой URL (создавая строку URL самостоятельно). http://php.net/manual/en/function.urlencode.php

Или вы можете использовать эту функцию вместо: http://php.net/manual/en/function.http-build-query.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...