总结数组php中的值

时间:2015-08-14 15:08:37

标签: php arrays

我从各种浏览器获得了一系列网站页面视图,我试图从数组中搜索特定浏览器的唯一出现,并总结每个浏览器的总值。

原始形式的数据

/usr/bin/grep

现在我正在尝试搜索特定的浏览器,然后总结每个

的值
$data = array(
            array("Browser Version", "Pageviews", "Visits"),
            array("Firefox 39.0", "93", "47"),
            array("Chrome 44.0.2403.125", "88", "26"),
            array("Chrome 44.0.2403.130", "34", "11"),
            array("Chrome 44.0.2403.107", "57", "10"),
            array("Chrome 44.0.2403.155", "22", "9"),
            array("Chrome 43.0.2357.134", "11", "4"),
            array("Chrome 44.0.2403.133", "5", "4"),
            array("Chrome 44.0.2403.89", "4", "3"),
            array("Opera 30.0.1835.125", "4", "3"),
            array("Opera 31.0.1889.99", "9", "3"),
            array("Chrome 43.0.2357.93", "2", "2"),
            array("Firefox 28.0", "5", "2"),
            array("BlackBerry 7.1.0.714", "1", "1"),
            array("Chrome 36.0.1985.135", "2", "1"),
            array("Firefox 40.0", "1", "1"),
            array("Internet Explorer 9.0", "2", "1")
);

我无法根据$ data数组获得每个的实际总和

例如,Firefox应该总共给我 $browsersArray = array(); $browsersArray["Firefox"] = array(); $browsersArray["Chrome"] = array(); $browsersArray["Internet Explorer"] = array(); $browsersArray["Safari"] = array(); $browsersArray["Opera"] = array(); $result_browser = ''; $result_browser_pageview = ''; $i = 0; foreach ($data as $data_row) { $i++; echo '<tr>'; while (list($key, $value) = each ($data_row)) { if($key == 0){ $result_browser = $value; } elseif($key == 1){ $result_browser_pageview = $value; } if($key == 0){ $firefoxSearchPos = stripos($result_browser, "Firefox"); $chromeSearchPos = stripos($result_browser, "Chrome"); $ieSearchPos = stripos($result_browser, "Internet Explorer"); $safariSearchPos = stripos($result_browser, "Safari"); $operaSearchPos = stripos($result_browser, "Opera"); if($firefoxSearchPos !== false) { $browsersArray["Firefox"][] = $result_browser_pageview; } elseif($chromeSearchPos !== false) { $browsersArray["Chrome"][] = $result_browser_pageview; } elseif($ieSearchPos !== false) { $browsersArray["Internet Explorer"][] = $result_browser_pageview; } elseif($safariSearchPos !== false) { $browsersArray["Safari"][] = $result_browser_pageview; } elseif($operaSearchPos !== false) { $browsersArray["Opera"][] = $result_browser_pageview; } } } // end while } 99,总访问量为50。

4 个答案:

答案 0 :(得分:0)

您的代码中没有数学,您只是将页面视图放入数组中的新元素:

$pageViews["Firefox"] += $result_browser_pageview;

应该是这样的:

{{1}}

+ =获取原始值并添加到其中。在Assignment Operators处查看更多信息。

答案 1 :(得分:0)

为什么你甚至有while()循环?您所做的就是检查您正在测试的密钥,并且无论如何都要跳过大部分循环迭代。这完全没有意义。这真是臭名昭着的货物编程。

简单地说:

foreach($data as $browser) {
    if (stripos($browser[0]), "Firefox") !== false ) {
       $browsersArray['Firefox'][] = $browser;
    }
    etc...
}

更紧凑的版本会使用正则表达式:

foreach($data as $browser) {
    if (preg_match('/^(Firefox|Chrome|Internet Explorer|etc...)/', $browser[0], $matches)) {
       $browsersArray[$matches[1]][] = $browser;
    } else {
       $browsersArray['unknown'][] = $browser;
    }
}

答案 2 :(得分:0)

您可以执行类似

的操作
Firefox page views: 99
Chrome page views: 225
Opera page views: 13
BlackBerry page views: 1
Internet Explorer page views: 2 

哪个给出了

tmp

答案 3 :(得分:0)

尝试这样的事情:

$result = array();
foreach($data as $row){
    if(@$i++ < 1) continue; // skip first line
    $fullName = array_shift($row);
    preg_match('~^([^\d]+)\s\d~',$fullName,$nameGroup);
    $name = $nameGroup[1];
    array_map('intval',$row);
    if(isset($result[$name])){
        foreach($row as $key => $value){
            $result[$name][$key] += $value;
        }
    }else{
        $result[$name] = $row;
    }
}

var_dump($result);
相关问题