2014-03-05 39 views
0

我有此數組:如何更改數組的價值

BEGIN_BROWSER 54 
msie6.0 7 
safari5.0.3 5 
chrome18.0.1025.308 1 
firefox20.0 4 
. 
. 
END_BROWSER 

而爲了讓我改變我這樣做的價值:

preg_match("/BEGIN_BROWSER(.*)END_BROWSER/is", $awstats, $matches); 
      $browser = $matches[0] ;    
      // print_array($browser); 

$newline = " 
"; 
      $lines = explode($newline,$browser); 
      $results = array(); 
      foreach($lines as $line) { 
       $parts = explode(" ",trim($line),2); 
       if(count($parts) < 2) continue; 
       else { 
        $results[$parts[0]] = intval($parts[1]); 
       } 
      } 
      $results["InternetExplorer"] = 0; 
      foreach($results as $key => $value){ 
       if(strpos($key,"msie") !== false){ 
       $results["InternetExplorer"] += $value; 
       unset($results[$key]); 
       } 
      } 

在結果我得到的,而不是msie =>InternetExplorer。有沒有辦法,我可以改變它,而不是Internet Explorer與單詞之間的空格?由於

+1

我不明白你的要求。你想把'$ results [「InternetExplorer」]'改成'$ results [「Internet Explorer」]'? – Quixrick

+0

是啊!但是當我這樣做時,它不會改變第一個'msie'! – SpencerX

+1

'$ results [「Internet Explorer」] = 0'? –

回答

1

首先,我會建議使用一些特定的字符替換\n\r然後就由特定字符爆炸字符串,因爲你使用的方法不建議分割新線。現在
的解決方案嘗試

$browsers = str_replace("\n\r", '~~', $awstats); 
$browsers = explode('~~', $browsers); 
$results = array(); 
$results['Internet Explorer'] = 0; 
foreach($browsers as $b) { 
    $parts = explode(" ",trim($b),2); 
    if(count($parts) < 2) continue; 
    else { 
     if ($parts[0] == 'msie') { 
      $results['Internet Explorer'] = $results['Internet Explorer'] + intval($parts[1]); 
     } 
     else { 
      $results[$parts[0]] = intval($parts[1]); 
     } 
    } 
} 
1

你可以使用preg_replace改變一個字符串:

foreach($results as $key => $value){ 

    $key = preg_replace('/InternetExplorer/', 'Internet Explorer', $key); 

    if(strpos($key,"msie") !== false){