假设我们有以下数组:
$ourArray = [
'a' => 'a',
'b' => 'b',
];
Run Code Online (Sandbox Code Playgroud)
我们尝试获取密钥的值'c'(不存在):
$someValue = $ourArray['c'] ?? null;
Run Code Online (Sandbox Code Playgroud)
因此,之前的声明不会引起任何注意,因为它只是语法糖isset.有关更多信息,请访问PHP站点.
在PHP7.1中引入了对称数组解构,因此想法是对数组进行解构以避免通知,例如:
[
'c' => $someValue
] = $ourArray;
Run Code Online (Sandbox Code Playgroud)
所以这将抛出Undefined index: c in $ourArray ....
那么,有没有办法避免PHP使用对称数组解构引发通知?并且不使用像error_reporting或的功能ini_set.
小智 13
您可以尝试通过合并一些默认值来确保密钥存在于数组中:
[$val0, $val1, $val2] = $arr + [2 => null];
Run Code Online (Sandbox Code Playgroud)
您可以使用该@运算符.
https://secure.php.net/manual/en/language.operators.errorcontrol.php
@[
'c' => $someValue
] = $ourArray;
Run Code Online (Sandbox Code Playgroud)
免责声明
此运营商存在争议.它可能会隐藏函数调用中的有用错误消息.许多程序员即使花费很高也会避免使用它.对于作业,它是安全的.
根据h2ooooooo的评论.
如果您可以并且想要定义所有默认值,您可以使用下面的代码.
[
'c' => $someValue
] = $ourArray + $defaults;
Run Code Online (Sandbox Code Playgroud)
操作员+很重要.该功能array_merge不会保留数字键.
定义$defaults可能如下所示.您必须为每个可能的键定义值.
$defaults = [
'a' => null,
'b' => null,
'c' => null,
'd' => null,
'e' => null,
'f' => null,
];
# or
$defaults = array_fill_keys(
['a', 'b', 'c', 'd', 'e', 'f'],
null
);
Run Code Online (Sandbox Code Playgroud)