编程语言
首页 > 编程语言> > php – 具有NULL或空值的数组中的Implode值会导致意外输出

php – 具有NULL或空值的数组中的Implode值会导致意外输出

作者:互联网

我想获得以下输出:

string1, string2, string3

这些值来自$var1,$var2和$var3,但它们在某些时候可能为NULL,这就是我的问题所在.

到目前为止,这就是我所拥有的:

$arr = array(
    $var1 !== null ? $var1 : '',
    $var2 !== null ? $var2 : '',
    $var3 !== null ? $var3 : '',
);

echo $arr !== '' ? implode(', ', $arr) : '-';

这是我运行的测试:

input: array('string1', 'string2', 'string3')
output: string1, string2, string3

input: array('string1', 'string2')
output: string1, string2

input: array('', '', '')
output: , ,

input: array(null, null, null)
output: , ,

正如您可能会注意到,如果值即将到来,一切都按照我想要的方式工作,如果值为NULL,那么我得到了,当我想要的只是一个 – 时.

我试图找到数组是否包含空值或使用此代码:

$cnt = count($arr) !== count(array_filter($arr, "strlen"));
echo $cnt;

然后我运行以下测试:

input: array('string1', 'string2', 'string3')
output: 3

input: array('string1', 'string2')
output: 2

input: array('', '', '')
output: 1

input: array(null, null, null)
output: 1

我在这里缺少什么或做错了什么?我怎么能做到这一点?

解决方法:

在内爆之前过滤数组,如果内爆数组是空字符串assign – ,否则分配内爆数组:

$result = implode(', ', array_filter($arr)) ?: '-';

对于PHP< 5.3.0不支持?:那么:

$result = ($s = implode(', ', array_filter($arr))) ? $s : '-';

标签:implode,php
来源: https://codeday.me/bug/20190823/1702665.html