Divide una matriz de fechas según el mes o el año

Tengo una matriz que devuelve una serie de fechas solicitadas que me gustaría dividir por mes o año según una variable.

Ejemplo de matriz actual:

array(4) { [0]=> string(10) "2012-02-01" [1]=> string(10) "2012-02-02" [2]=> string(10) "2011-02-03" [3]=> string(10) "2011-03-04" [4]=> string(10) "2011-04-05" } 

Para generar un gráfico de Google en la vista “Mes” o “Año”, necesito separar esta matriz y agrupar los “Años” o “Meses” según las preferencias de los usuarios, que estarán en una variable.

Ejemplo de lo que necesito devolver si en “Vista de año”

 array(2) { [0]=> Array(2) { [0]=> string(10) "2012-02-01" [1]=> string(10) "2012-02-02" } [1]=> Array(3) { [0]=> string(10) "2011-02-03" [1]=> string(10) "2011-03-14" [2]=> string(10) "2011-04-18" } } 

No estoy 100% seguro de que se trata de una matriz de sonido, pero necesito poder hacer una statement “foreach” para cada conjunto de fechas para que pueda sumr todos los valores (todo lo que necesito es fecha para la función para obtener el valor) y devolver un valor total y el año que será el mismo ya que están agrupados y voy a explotar el año de la última matriz en la statement de foreach.

Este es el mismo resultado esperado pero en el modo de vista “Mes”

 array(3) { [0]=> Array(3) { [0]=> string(10) "2012-02-01" [1]=> string(10) "2012-02-02" [2]=> string(10) "2011-02-03" } [1]=> Array(1) { [1]=> string(10) "2011-03-14" } [2]=> Array(1) { [1]=> string(10) "2011-04-18" } } 

¡Cualquier ayuda sería muy apreciada! Simplemente no puedo encontrar una solución manteniendo todo intacto.

¿Algo como esto?

 $years = Array(); $months = Array(); foreach($dates as $d) { list($y,$m) = explode("-",$d); $years[$y][] = $d; $months[$y."-".$m][] = $d; } $years = array_values($years); $months = array_values($months); var_dump($years,$months);