在分解数组时避免PHP注意

在分解数组时避免PHP注意,php,arrays,Php,Arrays,假设我们有以下数组: $ourArray = [ 'a' => 'a', 'b' => 'b', ]; 我们尝试获取key'c'的值(该值不存在): 因此,前面的语句不会引起任何注意,因为它只是isset的语法糖。欲了解更多信息,请访问 在PHP7.1中引入了,因此其思想是对阵列进行分解,以避免出现通知,例如: [ 'c' => $someValue ] = $ourArray; 因此,这将抛出$ourArray中的未定义索引:c… 那么,有没有任何方法

假设我们有以下数组:

$ourArray = [
   'a' => 'a',
   'b' => 'b',
];
我们尝试获取key
'c'
的值(该值不存在):

因此,前面的语句不会引起任何注意,因为它只是
isset
的语法糖。欲了解更多信息,请访问

在PHP7.1中引入了,因此其思想是对阵列进行分解,以避免出现通知,例如:

[
    'c' => $someValue
] = $ourArray;
因此,这将抛出$ourArray中的
未定义索引:c…

那么,有没有任何方法可以避免PHP使用对称数组分解抛出通知?并且不使用类似于
错误报告
ini\u set

解决方案的功能@ 您可以使用
@
运算符。

免责声明
这个操作员是有争议的。它可能会对函数调用隐藏有用的错误消息。许多程序员甚至会为了高昂的成本而避免使用它。但对于作业来说,这是安全的

带默认值的解决方案 基于H2Ooooo的评论

如果您可以并且想要定义所有默认值,您可以使用下面的代码

[
    'c' => $someValue
] = $ourArray + $defaults;
操作员
+
很重要。函数
array\u 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
);
你可以试试:

[
    'c' => $someValue
] = $ourArray + ['c' => null];

如果您知道数组应该具有哪些键,为什么不在执行其他操作之前合并它们<代码>$ourArray=array\u merge(['a'=>null,'b'=>null,'c'=>null],$ourArray)你的数组销毁示例没有意义…@JonStirling你能告诉我为什么没有意义吗?文档中没有提到这种类型的销毁。为什么您认为可以这样,在接收端使用数组的字典“味道”?@SergioTulentsev使用Mic提到的错误抑制运算符可能是最简单的方法,而无需合并数组或填充NULL。我也不知道这种新语法。就我个人而言,我可能会选择一个不同的解决方案。不知道是谁否决了你(可能只是因为一般来说隐藏了错误)。许多开发商不鼓励“stfu运营商”。是的,它是有效的,但它通常表示一个黑客解决方案,应该被更合适的解决方案所取代(我没有否决)。我也会接受@H2Oooooooo解决方案:
$ourArray=array\u merge(['a'=>null,'b'=>null,'c'=>null],$ourArray)
您可以简化$defaults定义,方法是在
foreach
语句中执行类似的操作。很遗憾,这是可行的。厉害
$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
);
[
    'c' => $someValue
] = $ourArray + ['c' => null];