PHP:像在Python中一样获取数组值?

时间:2012-03-21 15:24:43

标签: php python arrays get default

在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

5 个答案:

答案 0 :(得分: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视为不存在并返回{ {1}}。如果您希望数组中有$default,则必须使用NULL

array_key_exists()

答案 1 :(得分: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;
}

答案 2 :(得分:0)

在我的脑海里没有基本功能。

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

答案 3 :(得分:0)

是。或

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

答案 4 :(得分:0)

php7已经退出了很长时间,所以您可以这样做

$Arr[$Key] ?? $default