Search code examples
phparraysfor-looppreg-grep

preg_grep() expects parameter 2 to be array, null given


I have a mySQL query to fetch data from a whole year: $allYearData = $stmt->fetchAll();
Now i´d like to split this array into 12 parts, separated by month.

UPDATE
So i count rows in $allYearData:

//Count all keys
$allYearDataCount = Count($allYearData);

Now i use PHP preg_grep() to search and put result in new array $janData.

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

Result:
preg_grep() expects parameter 2 to be array, null given

If i check $allYearData for data i can see it´s full.

$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....

What am i doing wrong?


Solution

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

    First, you have $i <= $allYearData, so allYearData is number, or array? With loop there should be an integer there. Use count($allYearData) instead. and not <= but <.

    Second, use foreach loop, so you will have no problem with counting items. Or think twice before using for.