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