【问题标题】:PHP: get array value as in Python?PHP:像在 Python 中一样获取数组值?
【发布时间】:2012-04-06 03:34:04
【问题描述】:

在 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

【问题讨论】:

  • 为什么需要一个函数来使用数组的键获取值。 $a['key'] 这是怎么回事
  • @zod:如果密钥不存在,则会出现 PHP 错误。使用下面答案中的函数可以让您获得默认值而不是错误消息。

标签: php python arrays get default


【解决方案1】:

在我看来,没有基本功能可以做到这一点。

您的 GetItem 是做您想做的事的好方法 :)

【讨论】:

    【解决方案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;
    }
    

    【讨论】:

      【解决方案3】:

      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。如果您希望数组中有NULLs,则必须改用array_key_exists()

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

      【讨论】:

      【解决方案4】:

      是的。或

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

      【讨论】:

        【解决方案5】:

        php7已经出很长时间了,所以你可以做

        $Arr[$Key] ?? $default

        【讨论】:

          猜你喜欢
          • 2013-01-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-11
          • 2017-11-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多