PHP URL для массива - PullRequest
       0

PHP URL для массива

23 голосов
/ 09 ноября 2011

У меня есть эти URL из веб-журнала :

http://www.domain.com/page?s=194&client=151678&m=a4a&v=1&g=54
http://www.domain.com/page?s=51&client=617171&m=b4z&v=8&g=97

Как мне преобразовать этот URL в массив в PHP, поэтому у меня будет такой массив

array(
 'page' => array(
   's' => 194,
   'client' => 151678
   'm' => 'a4a',
   'v' => 1,
   'g' => 54
 )
 etc..
)

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

Ответы [ 6 ]

27 голосов
/ 09 ноября 2011

Возможно, есть лучший способ сделать это, но это то, что я придумал.

<?php

    $url = 'http://www.domain.com/page?s=194&client=151678&m=a4a&v=1&g=54';
    $remove_http = str_replace('http://', '', $url);
    $split_url = explode('?', $remove_http);
    $get_page_name = explode('/', $split_url[0]);
    $page_name = $get_page_name[1];

    $split_parameters = explode('&', $split_url[1]);

    for($i = 0; $i < count($split_parameters); $i++) {
        $final_split = explode('=', $split_parameters[$i]);
        $split_complete[$page_name][$final_split[0]] = $final_split[1];
    }

    var_dump($split_complete);

?>

http://codepad.org/xTsAks46

27 голосов
/ 09 ноября 2011

PHP имеет встроенную функцию для этого, функцию parse_str . Вы можете использовать его как:

parse_str($_SERVER['QUERY_STRING'], $outputArray);

Это будет делать то, что вам нужно.

6 голосов
/ 09 ноября 2011

С помощью parse_url() вы можете проанализировать URL-адрес ассоциативного массива. В результирующем массиве вы получаете среди прочего часть запроса. Затем вы можете использовать parse_str() для анализа части запроса в вашем новом массиве.

1 голос
/ 01 февраля 2014

Используйте функцию parse_url как

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));
echo parse_url($url, PHP_URL_PATH);
?>

Что даст вам следующий вывод массива

Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)

И из запроса вы можете легко разделить его на (ключ, значение) Пайра. Надеюсь, это поможет .:)

1 голос
/ 09 ноября 2011

Исходя из вашего вопроса, что путь всегда будет /page, массив, содержащий проанализированные URL, не может иметь несколько page индексов, поэтому вы должны использовать числовые индексы.

Попробуйте это:

$urls_parsed = array();
foreach ($url_strings as $url_string) {
    $url = parse_url($url_string);
    $urls_parsed[] = parse_str($url['query']);
}

$url_strings - это массив, содержащий все URL, которые вы хотите проанализировать в строковом формате. $urls_parsed - это результирующий массив, содержащий URL-адреса, проанализированные в запрошенном вами формате.

0 голосов
/ 09 ноября 2011

Вы можете сделать:

function convertUrlToArray($url){
    $url = str_replace("http://www.domain.com/page?", "", $url);
    $urlExploded =  explode("&", $url);
    $return = array();
    foreach ($urlExploded as $param){
        $explodedPar = explode("=", $param);
         $return[$explodedPar[0]] = $explodedPar[1];
    }
    return $return;

}

$url1 = convertUrlToArray("http://www.domain.com/page?s=51&client=617171&m=b4z&v=8&g=97");
var_dump($url1);

пример здесь http://codepad.org/KIDKPzaU

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