这是一个可能重复的条目。不幸的是我无法从Stackoverflow上的其他条目中弄清楚这一点。如果可以的话,请帮忙:))
我正在使用php中的迷你统计脚本来显示一些基本的统计信息。
我有一个多维数组,如下所示:
$found_data =
array(
array('2011-11-02' => 'mobile'),
array('2011-11-02' => 'mobile'),
array('2011-11-04' => 'mobile'),
array('2011-11-08' => 'Desktop'),
array('2011-11-08' => 'mobile'),
array('2011-11-08' => 'mobile'),
array('2011-11-08' => 'mobile'),
array('2011-11-15' => 'mobile'),
array('2011-11-18' => 'mobile'),
array('2011-11-21' => 'Desktop'),
array('2011-11-23' => 'mobile'),
array('2011-11-28' => 'Desktop'),
array('2011-11-30' => 'mobile')
);
现在我想代表这样的数据:
2011-11-01: 0 from mobile and 0 from desktop
2011-11-02: 2 from mobile and 0 from desktop
...
2011-11-30: 1 from mobile and 0 from desktop
我很确定你有这个想法。
我在很多变化中尝试了以下内容,但没有任何作用:
echo count(array_keys($found_data['2011-11-02'], "mobile"));
非常感谢任何帮助:)
答案 0 :(得分:2)
您不能将$ found_data编入索引:$found_data['2011-11-02']
因为您没有名为“2011-11-02”的密钥。您的$ found_data声明等同于:
$found_data =
array(
0 => array('2011-11-02' => 'mobile'),
1 => array('2011-11-02' => 'mobile'),
2 => array('2011-11-04' => 'mobile'),
... // and so on
);
我知道您使用multidimension多次使用相同的密钥,但正如上面的结构所示,您不能简单地使用array_keys
。
获得所需内容的一种方法是:
key
和value
key
,如果是,则增加相应的value
。否则,创建一个以mobile
和desktop
为键的新数组,并使用value
确定哪一个应该用1初始化(另一个则为0)。使用键key
预期的结果数组结构如下:
$result = array(
'2011-11-02' => array(
'mobile' => 2,
'desktop' => 1,
),
'2011-11-04' => array(
'mobile' => 0,
'desktop' => 1,
),
'2011-11-05' => array(
'mobile' => 2,
'desktop' => 0,
),
);
答案 1 :(得分:0)
我已经用不同的方式解决了这个问题,而不是上面提到的。
如果有人感兴趣,这就是答案:
$found_data =
array(
array('2011-11-02' => 'Mobile'),
array('2011-11-02' => 'Mobile'),
array('2011-11-04' => 'Mobile'),
array('2011-11-08' => 'Desktop'),
array('2011-11-08' => 'Mobile'),
array('2011-11-08' => 'Mobile'),
array('2011-11-08' => 'Mobile'),
array('2011-11-15' => 'Mobile'),
array('2011-11-18' => 'Mobile'),
array('2011-11-21' => 'Desktop'),
array('2011-11-23' => 'Mobile'),
array('2011-11-28' => 'Desktop'),
array('2011-11-30' => 'Mobile')
);
foreach($found_data as $single_data)
{
foreach($single_data as $data => $key)
{
$array_combined[$data]['Mobile'] = array();
$array_combined[$data]['Tablet'] = array();
$array_combined[$data]['Desktop'] = array();
}
}
foreach($found_data as $single_data)
{
foreach($single_data as $data => $key)
{
if($key=='Desktop')
array_push($array_combined[$data]['Desktop'], $key);
else if($key=='Tablet')
array_push($array_combined[$data]['Tablet'], $key);
else if($key=='Mobile')
array_push($array_combined[$data]['Mobile'], $key);
}
}
$startdate = strtotime('2011-11-01 00:00:01');
$days = 30;
echo 'Total hits the last 30 days: '.count($found_data).'<br />';
echo 'Desktop hits the last 30 days<br />';
for ($i = 0; $i <= $days; $i++) {
$date = date('Y-m-d', $startdate+$i*60*60*24);
printf("%s\t%s\n", $date, array_key_exists($date, $array_combined) ? count($array_combined[$date]['Desktop']) : 0);
echo '<br />';
}
echo 'Tablet hits the last 30 days<br />';
for ($i = 0; $i <= $days; $i++) {
$date = date('Y-m-d', $startdate+$i*60*60*24);
printf("%s\t%s\n", $date, array_key_exists($date, $array_combined) ? count($array_combined[$date]['Tablet']) : 0);
echo '<br />';
}
echo 'Mobile hits the last 30 days<br />';
for ($i = 0; $i <= $days; $i++) {
$date = date('Y-m-d', $startdate+$i*60*60*24);
printf("%s\t%s\n", $date, array_key_exists($date, $array_combined) ? count($array_combined[$date]['Mobile']) : 0);
echo '<br />';
}
可能不是最好的解决方案,但是有意为之。