У меня есть запрос MySQL для получения данных за весь год: $allYearData = $stmt->fetchAll();
Теперь я хотел бы разбить этот массив на 12 частей, разделенных по месяцам.
ОБНОВИТЬ
Поэтому я считаю строки в $allYearData
:
//Count all keys
$allYearDataCount = Count($allYearData);
Теперь я использую PHP preg_grep()
искать и помещать результат в новый массив $janData
,
for($i = 0; $i <= $allYearDataCount; $i++){
$janData[] = preg_grep("/^2015-01-.*$/", $allYearData[$i]);
}
Результат:
preg_grep() expects parameter 2 to be array, null given
Если я проверю $allYearData
для данных я могу видеть, что он полон.
$allYearData = $stmt->fetchAll();
print_r($allYearData);
Array ( [0] => Array ( [id] => 7811 [objekt_element] => 23050-121-1_3105 [objekt_nr] => 23050-121-1 [element_nr] => 3105 [vart] => B.Avf [vem] => Blå [anteckn] => [datum] => 2015-09-29 18:00:19 ) [1] => Array ( [id] => 7812 [objekt_element] => 23050-121-1_3107 [objekt_nr] => 23050-121-1 [element_nr] => 3107 [vart] => B.Avf [vem] => Blå [anteckn] => [datum] => 2015-09-29 18:00:22 ) [2....
Что я делаю неправильно?
for($i = 0; $i <= $allYearData; $i++){
$janData[] = preg_grep("/^2015-01-.*$/", $allYearData[$i]);
}
Во-первых, у вас есть $ я <= $ allYearData, поэтому allYearData — это число или массив? С циклом там должно быть целое число. Вместо этого используйте count ($ allYearData). и не <= но <,
Во-вторых, используйте цикл foreach, чтобы у вас не было проблем с подсчетом элементов. Или дважды подумайте, прежде чем использовать для.
Вы должны изменить
for($i = 0; $i <= $allYearData; $i++){
в
for($i = 0; $i < $allYearData; $i++){
потому что ваш массив начинается с индекса 0
и закончится индексом count($allYearData)-1
,
В вашем коде вы обращаетесь к массиву с индексом за пределами, так что $allYearData[$i]
будет null
в последней итерации вашего for
петля.
В этом кодексе $allYearData[$i]
должен быть массивом. Если вы будете искать ошибку preg_grep() expects parameter 2 to be array, null given
что 2 параметра необходимы, и вы дали, но последний параметр не является массивом, и его требуется, поэтому его предполагается null
последний параметр. Вам придется проверить ваш цикл и убедиться, что второй параметр Array
тип данных
for($i = 0; $i < $allYearData; $i++){
$janData[] = preg_grep("/^2015-01-.*$/", $allYearData[$i]);
}