2011-11-09 12 views
23

ho questi URL da un registro web:PHP URL di serie

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 

Come posso convertire questo URL in una matrice in PHPso avrò un array come questo

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

poi più tardi posso eseguire il ciclo su quell'array per trovare duplicati o convalidare correttamente le informazioni.

risposta

26

Ci può essere un modo migliore per fare questo, ma questo è quello che mi è venuta.

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

Grazie mille – eric

+0

molto completo - grazie. – foxybagga

26

PHP ha una funzione nativa per questo, la funzione parse_str. Puoi usarlo come:

Questo farà proprio quello che ti serve.

+2

come funziona per il web log? – Tech4Wilco

+0

Questo è il metodo preferito in quanto supporta qualsiasi stringa standard che separa con & e =. Funziona benissimo anche per le risposte arricciate. – Dss

+1

Questo dovrebbe essere l'errore accettato. –

6

Con parse_url() è possibile analizzare l'URL su un array associativo. Nell'array dei risultati si ottiene tra l'altro la parte della query. Quindi è possibile utilizzare parse_str() per analizzare la parte della query sul nuovo array.

0

Si potrebbe fare:

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

esempio qui http://codepad.org/KIDKPzaU

+0

che funziona ma mi manca la "pagina" – eric

1

Supponendo dalla tua domanda che il percorso sarà sempre /page, l'array contenente gli URL analizzati non possono avere più page indici così si dovrebbe utilizzare gli indici numerici.

Prova questo:

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

$url_strings è un array contenente tutti gli URL che si desidera analizzare in formato stringa. $urls_parsed è l'array risultante contenente gli URL analizzati nel formato richiesto.

1

funzione Use parse_url come

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

che vi darà il seguente array di uscita

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

E dalla query si può facilmente dividere per (chiave, valore) Paira. Spero che questo aiuti. :)