2011-11-09 15 views
23

mam tych adresów URL z dziennika internetowej:PHP url do tablicy

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 

Jak mogę przekonwertować ten adres w tablicy w PHPso będzie mam tablicę jak ten

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

później mogę nawiązać połączenie z tą tablicą, aby znaleźć duplikaty lub poprawnie zweryfikować informacje.

Odpowiedz

26

Nie może być lepszy sposób to zrobić, ale to, co wymyśliłem.

<?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

+0

Dziękuję bardzo – eric

+0

bardzo wszechstronny - dziękuję. – foxybagga

26

PHP ma natywną funkcję do tej funkcji, parse_str. Możesz go używać jako:

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

To zrobi dokładnie to, czego potrzebujesz.

+2

jak to będzie działać w przypadku dziennika internetowego? – Tech4Wilco

+0

Jest to preferowana metoda, ponieważ obsługuje każdy standardowy łańcuch, który dzieli znaki & i =. Działa również doskonale do odpowiedzi na curl. – Dss

+1

To powinno być akceptowane anwser. –

6

Dzięki parse_url() możesz zanalizować adres URL do tablicy asocjacyjnej. W tablicy wyników dostajesz między innymi część zapytania. Następnie możesz użyć parse_str() do analizy składni zapytania do nowej tablicy.

0

Można zrobić:

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); 

przykład tutaj http://codepad.org/KIDKPzaU

+0

który działa, ale brakuje mi "strony" – eric

1

Zakładając ze swoim pytaniu, że ścieżka będzie zawsze /page tablica zawierająca przeanalizowane URL nie może mieć wiele page indeksy więc należy użyć indeksów numerycznych.

Spróbuj tego:

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

$url_strings jest tablica zawierająca wszystkie adresy URL, które chcesz analizować w formacie strun. $urls_parsed to wynikowa tablica zawierająca adresy URL analizowane w żądanym formacie.

1

funkcja Zastosowanie parse_url jak

<?php 
$url = 'http://username:[email protected]/path?arg=value#anchor'; 
print_r(parse_url($url)); 
echo parse_url($url, PHP_URL_PATH); 
?> 

które dadzą Ci następujący tablicy wyjściowej

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

I z kwerendy można łatwo podzielić go jako klucza do (wartości), paira. Mam nadzieję, że to pomoże. :)