如果密钥不存在/不是真的,则通过密钥或假值获取数组中的值

时间:2017-08-10 14:28:37

标签: php arrays

我有以下数组:

$a = array('a' => 1,'b' => 2,'c' => null);

我想找到一种方法来访问给定键的元素值,如果键不存在,则为falsey值。

通过上面的例子,我希望$a['d']给我一个假的价值。 (类似于JavaScript:({}).b // -> undefined)。

我该怎么做?

编辑:在我的具体情况下,我不在乎,例如, $a['c'] => false

2 个答案:

答案 0 :(得分:3)

在PHP 7.0及更高版本中,您可以使用 null合并运算符

$d = $a['d'] ?? false;

在PHP 5.3及更高版本中,您可以使用三元语句

$d = isset($a['d']) ? $a['d'] : false;

在PHP7.0.20下面测试

PHP脚本

$a = array('a' => 1,'b' => 2,'c' => 3);

$b1 = $a['b'] ?? false;
$b2 = isset($a['b']) ? $a['b'] : false;
$b3 = $a['b'] ?: false;

$d1 = $a['d'] ?? false;
$d2 = isset($a['d']) ? $a['d'] : false;
// Undefined Error
// $d3 = $a['d'] ?: false;

var_dump([
    'b1' => $b1,
    'b2' => $b2,
    'b3' => $b3,
    'd1' => $d1,
    'd2' => $d2,
    // 'd3' => $d3
]);

控制台输出

| => php test.php
    array(5) {
        ["b1"]=>int(2)
        ["b2"]=>int(2)
        ["b3"]=>int(2)
        ["d1"]=>bool(false)
        ["d2"]=>bool(false)
    }

供参考,见:

答案 1 :(得分:0)

这有一个功能......

唯一正确的方式

$my_array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => null);

if(array_key_exists('d', $my_array)){
    // Do something
}
else{
    // Do something else
}

另外,请特别注意'd' => null,因为数据库很乐意返回null

// The almost right way
$my_array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => null);

$result = array_key_exists( 'd', $my_array ) ? $my_array['d'] : false;

var_dump( $result );

// The wrong way
$result = isset($my_array['d']) ? $my_array['d'] : false;

var_dump( $result );

我发布了“几乎正确的方式”,因为该值可以是false,见下文:

$my_array = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => false);

// $result it going to be false but there is no way to tell if this is due to the key being missing or if the key's value is literally false
$result = array_key_exists( 'd', $my_array ) ? $my_array['d'] : false;

如果发生上述情况,则所有逻辑都会消失。