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'] ?: []
);
它工作正常,但当main
或extra
密钥不存在时,我会收到以下消息:
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'] ?: []
);