-2

我有一个 mySQL 查询来获取一整年的数据:$allYearData = $stmt->fetchAll();
现在我想把这个数组分成 12 个部分,按月分隔。

更新
所以我计算行数$allYearData

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

现在我使用 PHPpreg_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....

我究竟做错了什么?

4

3 回答 3

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

首先,你有 $i <= $allYearData,所以 allYearData 是数字还是数组?使用循环应该有一个整数。请改用 count($allYearData)。而不是 <= 而是 <。

其次,使用 foreach 循环,这样计算项目就没有问题了。或者在使用之前三思而后行。

于 2015-10-14T07:02:42.293 回答
1

你必须改变

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

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

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

在您的代码中,您正在访问索引超出范围的数组,因此$allYearData[$i]它将null在循环的最后一次迭代中for

于 2015-10-14T07:02:56.840 回答
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]);
}
于 2015-10-14T07:07:34.057 回答