PHP:如何像Python一样获取数组值?

15

在Python中,我可以使用"get"方法从字典中获取值而不会出现错误。

a = {1: "a", 2: "b"}
a[3] # error
a.get(3, "") # I got empty string.

所以我在寻找一个通用/基础函数来执行此操作:

function GetItem($Arr, $Key, $Default){
    $res = '';
    if (array_key_exists($Key, $Arr)) {
        $res = $Arr[$Key];
    } else {
        $res = $Default;
    }
    return $res;
}

PHP和Python中基本上有相同的函数吗?

谢谢: dd


1
为什么需要一个函数来使用数组的键获取值。$a['key'] 这种方式有什么问题吗? - zod
1
@zod:如果键不存在,您将收到PHP错误。使用像下面答案中的函数之类的函数允许您获取默认值而不是错误消息。 - Justin ᚅᚔᚈᚄᚒᚔ
5个回答

10

isset() 通常比 array_key_exists() 更快。 如果省略了参数$default,则将其初始化为空字符串。

function getItem($array, $key, $default = "") {
  return isset($array[$key]) ? $array[$key] : $default;
}

// Call as
$array = array("abc" => 123, "def" => 455);
echo getItem($array, "xyz", "not here");
// "not here"

然而,如果一个数组键存在但其值为NULL,isset()将不会按照您期望的方式运行,因为它会将NULL视为不存在并返回$default。 如果您预期数组中有NULL值,则必须改用array_key_exists()

function getItem($array, $key, $default = "") {
  return array_key_exists($key, $array) ? $array[$key] : $default;
}

2
我又写了一个更简单、需要更少参数的帮助函数:https://dev59.com/p2w15IYBdhLWcg3wT5_2#25205195 - stepmuel

2
不完全正确。这应该表现相同。
function GetItem($Arr, $Key, $Default = ''){
    if (array_key_exists($Key, $Arr)) {
        $res = $Arr[$Key];
    } else {
        $res = $Default;
    }
    return $res;
}

您的函数中的第一行是无用的,因为每个代码路径都会导致$res被覆盖。诀窍在于将$Default参数设为可选。

请注意,使用array_key_exists()可能会导致显着的减速,特别是在大型数组上。另一种选择:
function GetItem($Arr, $Key, $Default = '') {
  return isset($Arr[$Key]) ? $Arr[$Key] : $Default;
}

0

是的。

function GetItem($Arr, $Key, $Default) {
  return array_key_exists($Key, $Arr)
      ? $Arr[$Key]
      : $Default;
}

0

PHP7 已经发布很长时间了,所以您可以这样做

$Arr[$Key] ?? $default


0

在我看来,没有基础函数可以实现那个功能。

你的 GetItem 是实现你想要做的事情的好方法 :)


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