PHP: получить значение массива, как в Python?

В Python я могу использовать метод get 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?

Спасибо:  дд

Ответы

Ответ 1

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

Не совсем. Это должно вести себя одинаково.

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

В моей голове нет базовой функции.

Ваш GetItem - хороший способ сделать то, что вы хотите сделать:)

Ответ 4

Да. или

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

Ответ 5

php7 давно отсутствует, так что вы можете сделать

$Arr[$Key] ?? $default