2015-10-14 81 views
-2

我有一个mySQL查询来从一整年中获取数据:$allYearData = $stmt->fetchAll();
现在我想将此数组拆分为12个部分,按月分隔。
preg_grep()期望参数2是数组,空给出

UPDATE
所以我$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数据,我可以看到it's满。

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

我到底做错了什么?

+0

你确定你是调用'$ allYearData = $ stmt->使用fetchall();使用了'$ allYearData'迭代之前' 'for'循环? –

回答

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

首先,你必须$ I < = $ allYearData,所以allYearData是数或数组?循环应该有一个整数。改用count($ allYearData)。而不是< =但是<。

其次,使用foreach循环,所以你将不会有计数项目的问题。或者在使用之前三思。

+0

我用'count'更新了我的问题。我还删除了'='。现在循环运行顺利。谢谢。我也会看看'foreach'。现在我有一个新问题。 '$ janData'包含与'allYearData'相同的值。过滤器循环不起作用... –

+1

- 是regexp中的一个特殊字符,因此而不是/^2015-01-.*$/,请尝试使用: /^2015\-01\-.*$/ – Daimos

1

你必须改变

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

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

,因为你的阵列开始于指数0,将与指数count($allYearData)-1结束。

在你的代码访问的数组索引出界让$allYearData[$i]nullfor循环的最后一次迭代。

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]); 
} 
相关问题