2011-11-09 27 views
23

Tôi có những url từ một bản ghi web:PHP url để mảng

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 

Làm thế nào tôi có thể chuyển đổi URL này trong một mảng trong PHPso tôi sẽ có một mảng như thế này

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

sau đó tôi có thể lặp lại mảng đó để tìm các bản sao hoặc xác thực thông tin một cách chính xác.

Trả lời

26

Có thể có một cách tốt hơn để làm điều này nhưng đây là những gì tôi đã đưa ra.

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

Cảm ơn bạn rất nhiều – eric

+0

rất toàn diện - cảm ơn. – foxybagga

26

PHP có hàm gốc cho hàm đó, hàm parse_str. Bạn có thể sử dụng nó như:

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

Điều này sẽ làm những gì bạn cần.

+2

cách tính năng này sẽ hoạt động đối với nhật ký web? – Tech4Wilco

+0

Đây là phương pháp được ưu tiên vì nó hỗ trợ bất kỳ chuỗi chuẩn nào phân tách bởi & và =. Hoạt động tốt cho các câu trả lời curl cũng như – Dss

+1

Điều này sẽ là anwser được chấp nhận. –

6

Với parse_url() bạn có thể phân tích cú pháp URL thành một mảng kết hợp. Trong mảng kết quả bạn nhận được trong số những người khác phần truy vấn. Sau đó, bạn có thể sử dụng parse_str() để phân tích phần truy vấn thành mảng mới của mình.

0

Bạn có thể làm:

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

ví dụ ở đây http://codepad.org/KIDKPzaU

+0

hoạt động nhưng tôi thiếu "trang" – eric

1

Giả sử từ câu hỏi của bạn con đường đó sẽ luôn luôn được /page, các mảng chứa các URL phân tích cú pháp không thể có nhiều page chỉ số, do đó bạn nên sử dụng các chỉ số số.

Hãy thử điều này:

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

$url_strings là một mảng chứa tất cả các URL mà bạn muốn phân tích ở định dạng chuỗi. $urls_parsed là mảng kết quả chứa URL được phân tích cú pháp theo định dạng bạn đã yêu cầu.

1

chức năng sử dụng parse_url như

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

Mà sẽ cung cấp cho bạn các mảng sau đầu ra

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

Và từ truy vấn mà bạn có thể dễ dàng chia nó như (key, value) paira. Hy vọng điều này sẽ giúp. :)