2014-03-05 37 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){