最近使用TP5.1做查询(数组查询方式)时出现了“查询表达式错误”的错误,查询条件数组是从前端输入的数据数组内层拿到的。
但是我的查询数组没毛病啊,于是在抛出异常的代码前打印了下指针位置key($value)
,发现居然是null!
层层定位后发现是在获取输入数据input()
后,内层数组的指针位置便是null了。看来是input()
的锅。
找到位置后,发现代码是这样的:
// 解析过滤器
$filter = $this->getFilter($filter, $default);
if (is_array($data)) {
array_walk_recursive($data, [$this, 'filterValue'], $filter);
reset($data);
} else {
$this->filterValue($data, $name, $filter);
}
原来TP5.1在获取输入数据并执行过滤操作时使用的array_walk_recursive()方法进行的递归操作,执行完毕后没有递归地重置数组指针,只重置了最外层数组。
解决方法就是递归重置一下啦~