preg_grep()期望参数2为数组,给定null

时间:2015-10-14 06:56:42

标签: php arrays for-loop preg-grep

我有一个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....

我做错了什么?

3 个答案:

答案 0 :(得分:1)

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

首先,你有$ i&lt; = $ allYearData,所以allYearData是数字还是数组?有了循环,那里应该有一个整数。请改用count($ allYearData)。而不是&lt; =但是&lt;。

其次,使用foreach循环,因此您对计算项目没有任何问题。或者在使用之前请三思。

答案 1 :(得分:1)

你必须改变

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

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

因为您的数组从索引0开始,并以索引count($allYearData)-1结束。

在您的代码中,您正在访问带有索引超出范围的数组,以便在$allYearData[$i]循环的最后一次迭代中nullfor

答案 2 :(得分: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]);
}