PHP 关联数组等价于 Python dict.get()
Posted
技术标签:
【中文标题】PHP 关联数组等价于 Python dict.get()【英文标题】:PHP associative array equivilent to Python dict.get() 【发布时间】:2014-04-27 15:15:32 【问题描述】:我已经离开 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 的 array functions 列表,但没有什么特别突出的。
【问题讨论】:
试试$value = $some_array[$unknown_key] ?: $default_value;
@adamr 我最喜欢你的解决方案。将其发布为答案,我会接受。
请注意,即使在 Python 中,some_dict.get(unknown_key, default_value)
也不同于 some_dict.get(unknown_key) or default_value
。如果键 unknown_key
不在字典中,第一个将仅返回 default_value
,而如果未找到键或值为 false,则后者将返回 default_value
。
【参考方案1】:
我猜你想要一些类似以下的东西:
$value = array_key_exists($unknown_key, $some_array) ? $some_array[$unknown_key] : $default_value;
这将检查键是否存在并返回值,否则将分配您分配给 $default_value
的默认值。
【讨论】:
【参考方案2】:$value = isset($some_array[$unknown_key]) ? $some_array[$unknown_key] : $default_value;
这样你就不需要禁止警告
【讨论】:
请注意,这与 Python 的some_dict.get(unknown_key, default_value)
并不完全相同,因为它设置了键但值为 null
(或在 Python 的情况下为 None
)。这就是isset
和array_key_exists
***.com/q/3210935/247696 之间的区别【参考方案3】:
试试这个:
$value = $some_array[$unknown_key] ?: $default_value;
这相当于Python中的这行代码:
value = some_dict.get(unknown_key, default_value)
请注意,在密钥存在但其值为 false 的边缘情况下,您将获得 $default_value
,这可能不是您想要的。
【讨论】:
请注意,这种速记三元运算符仅适用于 PHP v5.3 及更高版本。 这也会产生E_NOTICE
级警告。
很抱歉进行了多次编辑,但我认为现在更清楚了。以上是关于PHP 关联数组等价于 Python dict.get()的主要内容,如果未能解决你的问题,请参考以下文章