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

Posted

技术标签:

【中文标题】preg_grep() 期望参数 2 是数组,给定 null【英文标题】:preg_grep() expects parameter 2 to be array, null given 【发布时间】:2015-10-14 06:56:41 【问题描述】:

我有一个 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] =&gt; Array ( [id] =&gt; 7811 [objekt_element] =&gt; 23050-121-1_3105 [objekt_nr] =&gt; 23050-121-1 [element_nr] =&gt; 3105 [vart] =&gt; B.Avf [vem] =&gt; Blå [anteckn] =&gt; [datum] =&gt; 2015-09-29 18:00:19 ) [1] =&gt; Array ( [id] =&gt; 7812 [objekt_element] =&gt; 23050-121-1_3107 [objekt_nr] =&gt; 23050-121-1 [element_nr] =&gt; 3107 [vart] =&gt; B.Avf [vem] =&gt; Blå [anteckn] =&gt; [datum] =&gt; 2015-09-29 18:00:22 ) [2....

我做错了什么?

【问题讨论】:

您确定在使用for 循环迭代$allYearData 之前调用$allYearData = $stmt-&gt;fetchAll(); 【参考方案1】:
for($i = 0; $i <= $allYearData; $i++)
    $janData[] = preg_grep("/^2015-01-.*$/", $allYearData[$i]);

首先,你有 $i

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

【讨论】:

我用count 更新了我的问题。我也删除了=。现在循环运行顺利。谢谢你。我也会看看foreach。现在我有一个新问题。 $janData 包含与 allYearData 相同的值 .. 过滤器循环不起作用... - 是正则表达式中的一个特殊字符,所以不要使用 /^2015-01-.*$/,而是尝试使用:/^2015\-01\-.*$/【参考方案2】:

你必须改变

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

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

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

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

【讨论】:

【参考方案3】:

在此代码中$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]);

【讨论】:

以上是关于preg_grep() 期望参数 2 是数组,给定 null的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5:in_array() 期望参数 2 是数组,给定对象

ErrorException strtotime() 期望参数 1 是字符串,给定数组

如何修复 htmlspecialchars() 期望参数 1 是字符串,给定数组

ErrorException array_column() 期望参数 1 是数组,给定对象

Laravel Livewire key() 期望参数 1 是数组,给定整数 |嵌套组件 |在循环中加载组件

php正则表达式之preg_grep