Проще подсчитать в запросе MySQL. Например:
SELECT YEAR(`ndate`) AS 'year', MONTH(`ndate`) AS 'month', COUNT(`nid`) AS 'count' FROM `weaponsnews ` GROUP BY YEAR(`ndate`), MONTH(`ndate`) DESC
Это дает вам три столбца, где первый - год, второй - месяц, а третий - количество элементов в этом месяце. Затем вы можете легко перебрать этот список с помощью foreach. Что-то вроде:
$data = array();
while($row = $result->fetch_assoc()) {
$data[$row['year']][$row['month']] = $row['count'];
}
$result->free();
Это должно дать вам массив вроде:
$data = array(
'2001' => array(
'1' => '83',
'3' => '102'
),
'2012' => array(
'6' => '43',
'9' => '33'
),
'2013' => array(
'7' => '55'
)
);
Вы можете распечатать дерево, просматривая массив:
foreach ($data as $year => $months) {
echo $year.'<br>';
foreach ($months as $month => $count) {
echo $month.'('.$count.')<br>';
}
}