PHP,更简单的方法来获取没有警告的数组值

时间:2012-12-07 01:37:48

标签: php

花花公子,

是否有更简洁的方式来编写下面的陈述?如果我不检查是否存在数组键,则会收到PHP警告。但是,下面的内容有点过,呃,罗嗦。

谢谢!

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

5 个答案:

答案 0 :(得分: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;

答案 1 :(得分:3)

从PHP 7开始,您可以使用新的null coalescing operator

$display_flag = $pref_array['display_flag'] ?? false;

答案 2 :(得分:1)

你拥有它的方式很好,因为你应该验证该值是否确实存在,但你也可以做三元运算:

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

我将display_flag的内容强制转换为bool(如果已设置),因此在任何一种情况下都可以确保布尔值。

你也可以(但我不推荐),用@:

压制警告
$display_flag = @$pref_array['display_flag'];    

答案 3 :(得分:0)

// 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

答案 4 :(得分:0)

另一个更简单的选择是:

array_get($variable, 'keyName', null)

第三个参数是默认值。