preg_grep () ожидает, что параметр 2 будет массивом

У меня есть запрос 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....

Что я делаю неправильно?

-2

Решение

for($i = 0; $i <= $allYearData; $i++){
$janData[] = preg_grep("/^2015-01-.*$/", $allYearData[$i]);
}

Во-первых, у вас есть $ я <= $ allYearData, поэтому allYearData — это число или массив? С циклом там должно быть целое число. Вместо этого используйте count ($ allYearData). и не <= но <,

Во-вторых, используйте цикл foreach, чтобы у вас не было проблем с подсчетом элементов. Или дважды подумайте, прежде чем использовать для.

1

Другие решения

Вы должны изменить

for($i = 0; $i <= $allYearData; $i++){

в

for($i = 0; $i < $allYearData; $i++){

потому что ваш массив начинается с индекса 0 и закончится индексом count($allYearData)-1,

В вашем коде вы обращаетесь к массиву с индексом за пределами, так что $allYearData[$i] будет null в последней итерации вашего for петля.

1

В этом кодексе $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]);
}
1
По вопросам рекламы [email protected]