php 可以不向数组追加任何内容吗?

cgfeq70w  于 2022-12-17  发布在  PHP
关注(0)|答案(4)|浏览(138)

我想知道是否可以在数组中追加“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',
//   )

?>
093gszye

093gszye1#

赋值给$array[]时不能这样做。可以使用带数组参数的函数,通过将要添加的值 Package 在数组中,并使用空数组作为替代值来完成。array_merge()就是这样一个函数。

$new_array = array_merge($new_array, 
    key_exists("Car", $source_arr) ? [$source_arr["Car"]] : [],
    key_exists("State", $source_arr) ? [$source_arr["State"]] : []
);
1bqhqjot

1bqhqjot2#

你总是可以添加新值(即,即使它是空的),然后在添加完成后使用array_filter()删除空值:

$new_arr = array_filter([
    $source_arr["Car"] ?? null,
    $source_arr["State"] ?? null,
]);

当然,这里的问题是你永远无法依赖数组中的内容。第一个元素是car?city?Country?你永远不会知道。

62lalag4

62lalag43#

更好的是,使用array_intersect_key将所有内容都放在一行中

$source_arr = ["Car" => "Volvo", "City" => "Stockholm", "Country" => "Sweden"];
$new_arr    = array_intersect_key($source_arr, ['Car'=>'','State'=>'']);

var_export($new_arr);

以上输出如下:

array (
  'Car' => 'Volvo',
)

如果你真的想要一个非关联的索引数组,只需将array_intersect_key的结果传递给array_values
一个二个一个一个
Check both methods here.

uttx8gqw

uttx8gqw4#

是的,你绝对可以有条件地“不推任何东西”。
使用splat运算符来解压缩一个包含零个或一个元素的数组。
代码:(Demo

$source_arr = ["Car" => "Volvo", "City" => "Stockholm", "Country" => "Sweden"];
$new_arr    = [];

array_push(
    $new_arr,
    ...key_exists("Car",   $source_arr) ? [$source_arr["Car"]] : [],
    ...key_exists("State", $source_arr) ? [$source_arr["State"]] : []
);

var_export($new_arr);

相关问题