PHP:是否有一个空安全运算符来防止合并两个数组时出现"Undefined array key"警告?



foo['data']['main']是字符串,foo['data']['extra']是字符串数组。我想将它们合并到一个$data数组中,但它们可能不存在。

当我以这种方式合并它时。。。

$foo['data']['main'] = 'apple';
$foo['data']['extra'] = ['banana', 'orange'];
$data = array_merge(
[$foo['data']['main']] ?: [],
$foo['data']['extra'] ?: []
);

它工作正常,但当mainextra密钥不存在时,我会收到以下消息:

PHP警告:未定义的数组键"额外的";

是否有一个空安全运算符,我应该使用它来防止这种警告并使代码变得更好?

您可以使用;空合并运算符";??

https://www.php.net/manual/en/migration70.new-features.php#migration70.new-功能.空销售-op

那么你将得不到";数组键不存在";如果阵列密钥未设置,则显示消息

$foo['data']['main'] = 'apple';
$foo['data']['extra'] = ['banana', 'orange'];
$data = array_merge(
[$foo['data']['main']] ?? [],
$foo['data']['extra'] ?? []
);

结果:

数组([0]=>苹果[1] =>香蕉[2] =>橙色(

$foo['data']['main'] = 'apple';
$data = array_merge(
[$foo['data']['main']] ?? [],
$foo['data']['extra'] ?? []
);

结果:

数组([0]=>苹果(

您可以使用@运算符来抑制警告。

$data = array_merge(
[@$foo['data']['main']] ?: [],
@$foo['data']['extra'] ?: []
);

请注意,默认情况下,无论是否使用@运算符(只是抑制警告(,[$foo['data']['main']] ?: []都不会创建空数组。如果main元素不存在,则默认为NULL,因此它等效于[NULL] ?: []。由于[NULL]不是一个空数组,所以三元运算符将返回它,而不是默认的[]

因此,您需要的是一个普通的三元运算符,因为null值在数组嵌套中处于不同的级别。

$data = array_merge(
@$foo['data']['main'] ? [$foo['data']['main']] : [],
@$foo['data']['extra'] ?: []
);

相关内容

  • 没有找到相关文章

最新更新