提问人:sagar ahmad 提问时间:2/11/2023 最后编辑:Your Common Sensesagar ahmad 更新时间:10/15/2023 访问量:3388
未捕获的 TypeError:implode():参数 #1 ($pieces) 必须是数组类型,给定字符串
Uncaught TypeError: implode(): Argument #1 ($pieces) must be of type array, string given
问:
我是这样用的implode()
$var = implode(',', $dataColumns);
并得到一个奇怪的错误
未捕获的 TypeError:implode():参数 #1 ($pieces) 必须是数组类型,给定字符串
答:
5赞
Your Common Sense
9/9/2023
#1
此错误消息不是很清楚,而且具有误导性。据我所知,该消息将在未来修复,以更加清晰。
这实际上意味着您正在传递而不是数组来内爆。null
这个错误是有道理的,因为 null 不是数组,不应该内爆 null。
因此,错误来自于内爆有两个签名,一个涉及两个参数,另一个仅涉及单个参数:
// just two familiar parameters, a glue and array
implode(string $separator, array $array): string
// Alternative signature, array only without a glue
implode(array $array): string
当使用两个参数调用 implode 时,但第二个参数为 null,implode 认为它只用一个参数(必须是一个数组)调用,因此会发出错误,从而发出您看到的错误。
要修复此错误,只需确保未对 null 值调用 implode,因为它没有任何意义。
作为最后的手段,如果您无法控制提供数组的代码,则可以使用如下解决方法将此错误静音
implode($separator, $array ?? []);
When is ,此代码将只返回一个空字符串。但你必须明白,它与任何其他错误抑制一样糟糕。因此,最好修复错误,而不是症状。$array
null
评论
0赞
Nick
11/17/2023
写得很好的解释。一个完美的欺骗目标。
评论
implode