花花公子,
是否有更简洁的方式来编写下面的陈述?如果我不检查是否存在数组键,则会收到PHP警告。但是,下面的内容有点过,呃,罗嗦。
谢谢!
$display_flag = false;
if (array_key_exists('display_flag',$pref_array) {
$display_flag = $pref_array['display_flag'];
}
答案 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)
第三个参数是默认值。