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)。这就是issetarray_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()的主要内容,如果未能解决你的问题,请参考以下文章

Python 等价于 PHP Mcrypt

C++ 等价于 Python 的带有比较的数组访问 (array[condition] = value)

Python 等价于 phpinfo()

074-PHP数组元素相乘

073-PHP数组元素相加

PHP数组深入