PHP关联数组相当于Python的dict.get()吗

6 投票
3 回答
2887 浏览
提问于 2025-04-17 23:10

我已经离开PHP的世界好几年了,最近接手了一个PHP项目。不过,有些在PHP中应该很简单的事情让我感到困惑。在Python中,我可以这样做:

value = some_dict.get(unknown_key, default_value)

我在PHP中第一个想到的做法是:

$value = $some_array[$unknown_key] || $default_value;

但是在PHP中,$value变成了布尔值,因为PHP不支持值的短路运算。我还收到了一个Notice: Undefined index: the_key的提示,不过我知道可以通过在前面加上@来抑制这个提示。

有没有办法在PHP中实现类似于Python的dict.get(key, default)的功能呢?我查看了PHP的数组函数列表,但没有找到特别合适的。

3 个回答

1

试试这个:

$value = $some_array[$unknown_key] ?: $default_value;

这行代码在Python中是等价的:

value = some_dict.get(unknown_key, default_value)

注意,在一种特殊情况下,如果这个键存在但它的值是“假”的(比如0、空字符串等),你会得到$default_value,这可能不是你想要的结果。

4
$value = isset($some_array[$unknown_key]) ? $some_array[$unknown_key] : $default_value;

这样你就不需要去屏蔽警告了

7

我想你想要的东西大概是这样的:

$value = array_key_exists($unknown_key, $some_array) ? $some_array[$unknown_key] : $default_value;

这个代码会先检查这个“键”是否存在,如果存在就返回它的“值”;如果不存在,就会使用你之前设置的默认值,也就是$default_value

撰写回答