我想知道是否可以在数组中追加“nothing,”也就是说,数组不会受到影响。这个场景是我想使用? :
操作符将值追加到数组中如果它存在。否则不追加任何值。我知道我可以用普通的if
语句解决这个问题,而不需要else
部分。但是有没有办法告诉PHP它应该追加“nothing”呢?我只是好奇是否有这样的方法?
<?php
$source_arr = ["Car" => "Volvo", "City" => "Stockholm", "Country" => "Sweden"];
$new_arr = [];
$new_arr[] = (key_exists("Car", $source_arr)) ? $source_arr["Car"] : [];
$new_arr[] = (key_exists("State", $source_arr)) ? $source_arr["State"] : [];
// An ordinary if statement works of course:
// if (key_exists("State", $source_arr)) { $new_arr[] = $source_arr["State"]; }
// But, is it possible to use ? : and append "nothing" (i.e. not using []) if key doesn't exist?
echo "<pre>";
var_export($new_arr);
echo "</pre>";
// The above outputs (and I understand why):
// array (
// 0 => 'Volvo',
// 1 =>
// array (
// ),
// )
//
// But I want the following result (but I don't know if it's possible with ? :)
// array (
// 0 => 'Volvo',
// )
?>
4条答案
按热度按时间093gszye1#
赋值给
$array[]
时不能这样做。可以使用带数组参数的函数,通过将要添加的值 Package 在数组中,并使用空数组作为替代值来完成。array_merge()
就是这样一个函数。1bqhqjot2#
你总是可以添加新值(即,即使它是空的),然后在添加完成后使用
array_filter()
删除空值:当然,这里的问题是你永远无法依赖数组中的内容。第一个元素是car?city?Country?你永远不会知道。
62lalag43#
更好的是,使用
array_intersect_key
将所有内容都放在一行中以上输出如下:
如果你真的想要一个非关联的索引数组,只需将
array_intersect_key
的结果传递给array_values
:一个二个一个一个
Check both methods here.
uttx8gqw4#
是的,你绝对可以有条件地“不推任何东西”。
使用splat运算符来解压缩一个包含零个或一个元素的数组。
代码:(Demo)