PHP关联数组等价于Python中的dict.get()方法。

6

我已经有几年没有接触PHP了,最近我继承了一个PHP项目。在PHP中应该很容易的事情却让我感到困惑。在Python中我可以这样做:

value = some_dict.get(unknown_key, default_value)

我的第一个想法是用PHP做同样的事情:
$value = $some_array[$unknown_key] || $default_value;
$value变成了布尔值,因为PHP不支持值短路。我还收到了一个Notice: Undefined index: the_key,但我知道我可以通过在前面加@来抑制它。
是否有一种方法可以在PHP中实现类似于Python的dict.get(key,default)的行为?我查看了PHP的数组函数列表,但没有任何突出的东西。

尝试 $value = $some_array[$unknown_key] ?: $default_value; - adamr
@adamr,我最喜欢你的解决方案。把它发表为答案,我会接受它。 - Uyghur Lives Matter
请注意,即使在Python中,some_dict.get(unknown_key, default_value)也不同于some_dict.get(unknown_key) or default_value。前者仅在字典中不存在键unknown_key时返回default_value,而后者将在未找到键或值为falsey时返回default_value - Flimm
3个回答

7
我猜您想要类似以下内容的东西:

我猜您希望得到以下类似内容:

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

这个语句检查键是否存在,如果存在则返回对应的值,否则将赋予你所指定的默认值$default_value


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

这样你就不需要抑制警告信息。

2
请注意,当键被设置但值为 null(或 Python 中的 None)时,这与 Python 的 some_dict.get(unknown_key, default_value) 不完全相同。这就是 isset 和 array_key_exists 之间的区别。https://dev59.com/w3A75IYBdhLWcg3wlqOh - Flimm

1

试试这个:

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

这相当于Python中的这行代码:
value = some_dict.get(unknown_key, default_value)

请注意,在键存在但其值为假值的边缘情况下,您将获得$default_value,这可能不是您想要的结果。

请注意,这种简写的三元运算符仅适用于PHP v5.3及以上版本。 - Luke
4
这也会产生一个 E_NOTICE 级别的警告。 - phihag
抱歉多次编辑,但我认为现在更清晰了。 - Flimm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接