未捕获的 TypeError:implode():参数 #1 ($pieces) 必须是数组类型,给定字符串

Uncaught TypeError: implode(): Argument #1 ($pieces) must be of type array, string given

提问人:sagar ahmad 提问时间:2/11/2023 最后编辑:Your Common Sensesagar ahmad 更新时间:10/15/2023 访问量:3388

问:

我是这样用的implode()

$var = implode(',', $dataColumns);

并得到一个奇怪的错误

未捕获的 TypeError:implode():参数 #1 ($pieces) 必须是数组类型,给定字符串

PHP的

评论

2赞 Rager 2/11/2023
嘿,你好!欢迎来到 Stackoverflow!我注意到您的问题可能需要更多的上下文才能使其更清晰。您能否提供一些其他详细信息,以便社区能够更好地理解您的问题?谢谢!
1赞 brombeer 2/11/2023
php.net/manual/en/function.implode.php检查参数顺序
1赞 SelVazi 2/11/2023
这看起来是正确的!也许问题出在代码的其他部分implode
0赞 Nico Haase 10/4/2023
您是否检查了代码的任何其他部分是否抛出该错误?我无法重现它
3赞 Your Common Sense 10/4/2023
@NicoHaase可以很容易地复制

答:

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 ,此代码将只返回一个空字符串。但你必须明白,它与任何其他错误抑制一样糟糕。因此,最好修复错误,而不是症状。$arraynull

评论

0赞 Nick 11/17/2023
写得很好的解释。一个完美的欺骗目标。