2015-05-08 125 views
0

我有一個數組$headers,看起來像這樣,我只想提取服務器名稱。問題是數據並不總是以相同的順序,所以我需要搜索「服務器」並返回它的值。我想我需要使用循環,但無法弄清楚如何合併搜索。從數組循環和匹配關鍵字返回值(php)

樣品陣列$頭

array(13) { 
    [0]=> 
    string(15) "HTTP/1.1 200 OK" 
    [1]=> 
    string(19) "Server: nginx/1.6.2" 
    [2]=> 
    string(35) "Date: Fri, 08 May 2015 14:27:28 GMT" 
    [3]=> 
    string(38) "Content-Type: text/html; charset=utf-8" 
    [4]=> 
    string(17) "Connection: close" 
    [5]=> 
    string(25) "X-Powered-By: PHP/5.6.7-1" 
    [6]=> 
    string(44) "Last-Modified: Fri, 08 May 2015 14:20:12 GMT" 
} 

我想提取的服務器名稱的nginx/1.6.2

這裏是我的循環,我需要建立在

foreach ($headers as $value) { 
    echo "$value\n"; 
} 

回答

1
$a = [ 
    "HTTP/1.1 200 OK", 
    "Server: nginx/1.6.2", 
    "Date: Fri, 08 May 2015 14:27:28 GMT", 
    "Content-Type: text/html; charset=utf-8", 
    "Connection: close", 
    "X-Powered-By: PHP/5.6.7-1", 
    "Last-Modified: Fri, 08 May 2015 14:20:12 GMT" 
    ]; 

preg_match('/^Server: (.*)$/m', implode(PHP_EOL, $a), $matches); 
echo $matches[1], PHP_EOL; 

輸出:

nginx/1.6.2 
+0

我認爲你的數組格式不同,我如何擁有它..我需要先轉換它不知何故? – user3436467

+0

好吧,這工作得很好 - 謝謝 – user3436467

3

假設只有一個Server標題:

$result = current(preg_grep('/^Server:/', $headers)); 

你也可以看看http_parse_headers(),但它需要原始頭文件而不是數組。如果你沒有原始頭,你仍然可以使用它也許:

$result = http_parse_headers(implode("\r\n", $headers))['Server']; 
+0

他表示數據並不總是相同。所以你怎麼給索引。 –

+0

我得到了這個警告'注意:未定義的偏移量:0' – user3436467

+0

沒問題吧。對於錯誤理解 –