Я пытаюсь оптимизировать свое приложение. Мне нужно знать, возможно ли то, что я хочу сделать.
Я сделал несколько попыток, основываясь на успехе indexBy.
В настоящее время я могу изменять структуру массива результатов так, как мне нужно, через PHP.
Я хочу знать, способен ли QueryBuilder сделать это для меня и как (если это возможно).
Вот построение запроса:
return $this->createQueryBuilder('a')
->select('SUBSTRING(a.creationDate, 1,4) year, TRIM(LEADING \'0\' FROM SUBSTRING(a.creationDate, 6,2)) month, COUNT(a) number')
->where('a.creationDate > :limitDate')
->groupBy('year')
->addGroupBy('month')
->orderBy('year', 'ASC')
->addOrderBy('month', 'ASC')
->setParameter('limitDate', new \DateTime("2000-01-01 00:00:00") )
->getQuery()
->getArrayResult();
Вот фактический результат запроса:
Array (
[0] => Array ( [year] => 2016 [month] => 10 [number] => 96 )
[1] => Array ( [year] => 2016 [month] => 11 [number] => 159 )
[2] => Array ( [year] => 2016 [month] => 12 [number] => 118 )
[3] => Array ( [year] => 2016 [month] => 9 [number] => 47 )
[4] => Array ( [year] => 2017 [month] => 1 [number] => 44 )
[5] => Array ( [year] => 2017 [month] => 10 [number] => 47 )
...
)
Вот код PHP, который я использую для изменения массива, как я хочу:
$myRestructuredArray = [];
foreach($myArray as $line)
{
$myRestructuredArray [$line['year']][$line['month']] = $line['number'];
}
Вот результат, который мне нужен:
Array (
[2016] => Array (
[10] => 96
[11] => 159
[12] => 118
[9] => 47 )
[2017] => Array (
[1] => 44
[10] => 47
...
)