php - 使用 NULL 或空值从数组中内爆值会导致意外输出

标签 php 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

我在这里遗漏了什么或做错了什么?我怎样才能做到这一点?

最佳答案

内爆前过滤数组,如果内爆数组为空字符串赋值-,否则赋值内爆数组:

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

对于 PHP < 5.3.0 不支持 ?: 然后:

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

关于php - 使用 NULL 或空值从数组中内爆值会导致意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40247233/

相关文章:

javascript - 检查 jQuery.validate() 上的元素上是否已有 "active"类

javascript - Stripe 结帐自定义按钮不充电

php - 从mysql中的数字开始替换列数据

php - 如何在MySQL中保存通过PHP输入的外语输入(目前正在更改)

php - YII2 错误 - 需要应用程序的 "id"配置

php - 是否有更优雅的方式来内爆数据以进行查询?

php - 如何使用 MySQL 将一条记录的值分解为多行?

php - 非常简单的内爆查询给出了内爆 : invalid arguments passed

php - 内爆 2 个独立的阵列?