4

伙计们,

有没有更简洁的方法来写下面的语句?如果我不检查数组键是否存在,我会收到 PHP 警告。不过,下面的也有点过头了,嗯,罗嗦。

谢谢!

$display_flag = false;
if (array_key_exists('display_flag',$pref_array) { 
    $display_flag = $pref_array['display_flag']; 
}
4

5 回答 5

8

如果$display_flag是布尔值:

$display_flag = isset($pref_array['display_flag']) && $pref_array['display_flag'];

如果是字符串:

$display_flag = isset($pref_array['display_flag']) ? $pref_array['display_flag'] : false;
于 2012-12-07T01:40:35.750 回答
6

从 PHP 7 开始,您可以使用新的null 合并运算符

$display_flag = $pref_array['display_flag'] ?? false;
于 2017-01-28T07:06:58.513 回答
1
// Get the $pref_array from wherever

$default_prefs = array(
  "display_flag" => false,
);

$pref_array = array_merge($default_prefs, $pref_array);

// Now you know it's always defined with default values
于 2012-12-07T01:40:42.640 回答
0

您拥有它的方式很好,因为您应该验证该值是否确实存在,但您也可以执行三元操作:

$display_flag = (isset($pref_array['display_flag'])) ? (bool) $pref_array['display_flag'] : false;

如果设置了 display_flag 的内容,我会将其类型转换为 bool,因此在任何一种情况下都可以确保您是布尔值。

你也可以(但我不推荐),用@压制警告:

$display_flag = @$pref_array['display_flag'];    
于 2012-12-07T01:42:12.583 回答
0

另一个更简单的选择是:

array_get($variable, 'keyName', null)

第三个参数是默认值。

于 2016-09-15T17:16:36.500 回答