PHP: 是否有一个很好的语法来根据数组元素是否未定义而不使用 if 来初始化数组元素?
PHP: is there a good syntax to initialize an array element depending on whether it is undefined or not, without using if?
PHP
中的双问号语法
$foo = $bar ?? null;
如果 $bar 未定义,将 return 为 null。这种语法对于简化代码和避免大量 if 语句非常有用。
现在我有以下情况
if (!isset($bar2)) {
$fooArr = [$bar1];
} else {
$fooArr = [$bar1, $bar2];
}
似乎很可能存在对语句的一行简化,但我就是想不出来。
我想出的最接近的是下面的,但它会创建一个大小为 2 的数组,其中第二个元素为 null,这不是我想要的。
$fooArr = [$bar1, $bar2 ?? null];
有没有办法在不使用if语句的情况下简化上述嵌套if?
编辑:? :
语法适用于上述情况,但在那种情况下我仍然需要写下 $bar1
两次,这并不比 if 语句更整洁并且可以真正增长当数组由 5 个元素组成时很大。
array_filter()
方法默认仅 returns 来自数组的非空值。
此代码显示了各种结果:
$bar1=1;
$fooArr = [$bar1, $bar2 ?? null];
print_r($fooArr);
$bar2=2;
$fooArr = [$bar1, $bar2 ?? null];
print_r($fooArr);
unset($bar1,$bar2);
$bar1=1;
$fooArr = array_filter([$bar1, $bar2 ?? null]);
print_r($fooArr);
$bar2=2;
$fooArr = array_filter([$bar1, $bar2 ?? null]);
print_r($fooArr);
PHP
中的双问号语法$foo = $bar ?? null;
如果 $bar 未定义,将 return 为 null。这种语法对于简化代码和避免大量 if 语句非常有用。
现在我有以下情况
if (!isset($bar2)) {
$fooArr = [$bar1];
} else {
$fooArr = [$bar1, $bar2];
}
似乎很可能存在对语句的一行简化,但我就是想不出来。
我想出的最接近的是下面的,但它会创建一个大小为 2 的数组,其中第二个元素为 null,这不是我想要的。
$fooArr = [$bar1, $bar2 ?? null];
有没有办法在不使用if语句的情况下简化上述嵌套if?
编辑:? :
语法适用于上述情况,但在那种情况下我仍然需要写下 $bar1
两次,这并不比 if 语句更整洁并且可以真正增长当数组由 5 个元素组成时很大。
array_filter()
方法默认仅 returns 来自数组的非空值。
此代码显示了各种结果:
$bar1=1;
$fooArr = [$bar1, $bar2 ?? null];
print_r($fooArr);
$bar2=2;
$fooArr = [$bar1, $bar2 ?? null];
print_r($fooArr);
unset($bar1,$bar2);
$bar1=1;
$fooArr = array_filter([$bar1, $bar2 ?? null]);
print_r($fooArr);
$bar2=2;
$fooArr = array_filter([$bar1, $bar2 ?? null]);
print_r($fooArr);