从PHP多维数组中检索值

从PHP多维数组中检索值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个多维数组,我想打印网站管理员的统计数据。我的问题是,一旦我以我想要的格式将数据放入数组中,我就不知道如何检索它。我必须知道关键值才能获得它,例如,$uniqueBrowser[“Firefox”][“14.0.1”][“times”] 例如,我想说,Firefox占70%,IE占30%,这是一个开始(将浏览器的所有版本“使用次数”加起来)。然后我想进一步深入到特定版本,例如FF3.6 14%、FF14 51%等(只需打印出与版本相关的时间值) 编辑:我的问题是,如何以上述方式检索数据?

我有一个多维数组,我想打印网站管理员的统计数据。我的问题是,一旦我以我想要的格式将数据放入数组中,我就不知道如何检索它。我必须知道关键值才能获得它,例如,
$uniqueBrowser[“Firefox”][“14.0.1”][“times”]

例如,我想说,Firefox占70%,IE占30%,这是一个开始(将浏览器的所有版本“使用次数”加起来)。然后我想进一步深入到特定版本,例如FF3.6 14%、FF14 51%等(只需打印出与版本相关的时间值)

编辑:我的问题是,如何以上述方式检索数据? 我的头被炸了,我已经在这上面呆了太久了。请有人把我从痛苦中解救出来。如果有更好的方法,也请让我知道

到目前为止,我的代码如下。此代码在for-each循环中运行,该循环遍历数据库返回的数据。
$browser
$version
变量设置为
foreach
循环每次迭代时从数据库返回的浏览器值和版本值

if(in_array($browser, $uniqueBrowser)) {        
    if(in_array($version, $uniqueBrowser[$browser])) {
        $uniqueBrowser[$browser][$version]['times'] = $uniqueBrowser[$browser][$version]['times'] + 1;
    } else {            
        $uniqueBrowser[$browser]['version'] = $version;
        $uniqueBrowser[$browser][$version]['times'] = 1;
    }       
} else {
    $uniqueBrowser[] = $browser;
    $uniqueBrowser[$browser]['version'] = $version;
    $uniqueBrowser[$browser][$version]['times'] = 1;
}
当我运行此代码时,它会给出以下信息(通过var_dump):


我不确定我是否完全理解您的问题,但是您是否尝试过使用扩展for循环迭代数组

e、 g:

foreach ($uniqueBrowser as $browserName=>$values){

    echo $browserName .' contains '. print_r($values,true);

}

与其从数据库中获取数据并将其放入复杂的数组中,不如让数据库为您完成工作,并以所需的格式从查询中检索值

让数据库进行计算,而不要使用PHP进行计算。这让事情变得过于复杂。

我知道我已经给出了这样的答案,但我先添加了我的评论。所以我不觉得我在模仿他

作为示例,我创建了以下表结构。希望它和你的一样

+---------+------------------+------+-----+---------+----------------+
| Field   | Type             | Null | Key | Default | Extra          |
+---------+------------------+------+-----+---------+----------------+
| id      | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| browser | varchar(120)     | YES  |     | NULL    |                |
| version | varchar(50)      | YES  |     | NULL    |                |
+---------+------------------+------+-----+---------+----------------+
+----+---------+---------+
| id | browser | version |
+----+---------+---------+
|  1 | Firefox | 3.6     |
|  2 | Firefox | 4.1     |
|  3 | Firefox | 3.6     |
|  4 | Safari  | 5.1.7   |
|  5 | Safari  | 6       |
|  6 | Firefox | 14.0.1  |
|  7 | IE      | 7       |
|  8 | IE      | 8       |
|  9 | IE      | 7       |
| 10 | Firefox | 14.0.1  |
| 11 | Opera   | 12.0.1  |
| 12 | Safari  | 5.1.7   |
+----+---------+---------+
然后我又插入了下面几行,希望和你的一样

+---------+------------------+------+-----+---------+----------------+
| Field   | Type             | Null | Key | Default | Extra          |
+---------+------------------+------+-----+---------+----------------+
| id      | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| browser | varchar(120)     | YES  |     | NULL    |                |
| version | varchar(50)      | YES  |     | NULL    |                |
+---------+------------------+------+-----+---------+----------------+
+----+---------+---------+
| id | browser | version |
+----+---------+---------+
|  1 | Firefox | 3.6     |
|  2 | Firefox | 4.1     |
|  3 | Firefox | 3.6     |
|  4 | Safari  | 5.1.7   |
|  5 | Safari  | 6       |
|  6 | Firefox | 14.0.1  |
|  7 | IE      | 7       |
|  8 | IE      | 8       |
|  9 | IE      | 7       |
| 10 | Firefox | 14.0.1  |
| 11 | Opera   | 12.0.1  |
| 12 | Safari  | 5.1.7   |
+----+---------+---------+
然后,下面的查询生成了这些结果

mysql> SELECT browser, version, COUNT(version) AS times FROM demo.browsers GROUP BY browser;
+---------+---------+-------+
| browser | version | times |
+---------+---------+-------+
| Firefox | 3.6     |     5 |
| IE      | 7       |     3 |
| Opera   | 12.0.1  |     1 |
| Safari  | 5.1.7   |     3 |
+---------+---------+-------+
如果希望更精确,您可以使用
按浏览器分组,而不仅仅是按浏览器

mysql> SELECT browser, version, COUNT(version) AS times FROM demo.browsers GROUP BY browser, version;
+---------+---------+-------+
| browser | version | times |
+---------+---------+-------+
| Firefox | 14.0.1  |     2 |
| Firefox | 3.6     |     2 |
| Firefox | 4.1     |     1 |
| IE      | 7       |     2 |
| IE      | 8       |     1 |
| Opera   | 12.0.1  |     1 |
| Safari  | 5.1.7   |     2 |
| Safari  | 6       |     1 |
+---------+---------+-------+

@Ivo-立即更新我的问题。添加
echo'在var_转储之前,并在此处给出新结果。现在很难读取此数组。如果在查询中使用
COUNT
groupby
组合,应该会使事情变得更简单。现在添加了格式化的var\u转储数据。谢谢你的提示。使其更易于阅读,并注意到版本数据也存在一个问题,即键值错误。谢谢,按照您和贝勒的建议,使用基于数据库的解决方案。非常相似,是的。谢谢,我现在就来试试,并汇报一下进展情况。这会让事情变得更容易,而且没有人会来维护页面,他们会诅咒我:)