问题描述
我正在努力解决这个问题:
我有一个数组,以月为值。数组中有3个值(月):09
,09
和04
。因此,9月(09)一个月的2倍,4月(04)一个月的1倍。
现在我只希望每月输出一次,并且每月只输出一次。 所以我的输出应该像这样
04 1 // april 1 time
09 2 // september 2 times
我现在有这个foreach循环:
$months = array('04','09','09');
foreach($months as $month) {
$archive_months = array('01','02','03','04','05','06','07','08','10','11','12');
$counts = array_count_values($archive_months);
echo $month.' '.$counts[$month].'<br />';
如果我使用foreach(array_unique($months) as $month) {
,则9月(09)仅出现一次,但数字为1,而不是2。
输出:
04 1
09 1
它应该是:
04 1
09 2
解决方法
仅计算月份值而不是archive_months
<?php
$months = array('04','09','09');
$counts = array_count_values($months);
var_dump($counts);
输出:
array(2) {
["04"]=>
int(1)
["09"]=>
int(2)
}
,
您不是在计算$months
,而是$archive_months
。
arry_count_values
已经在满足您的需求。无需for循环。
$months = array('04','09');
print_r(array_count_values($months));
,
就像已经提到过rel一样:
$months = array('04','09');
$counts = array_count_values($months);
// your foreach:
foreach($counts as $key => $val) {
echo $key.' '.$val.'<br />';
}
输出将类似于:
09 2
04 1