2012-03-21 2 views
14

파이썬에서는 "get"메서드를 사용하여 오류없이 사전에서 값을 가져올 수 있습니다. PHP : 파이썬 에서처럼 배열 값을 얻으시겠습니까?

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

파이썬으로 PHP에 basicly 동일한 기능을 가지고 :

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

그래서 나는 이렇게 공통/기본 기능을 검색?

감사 : DD

+1

이유는 배열의 키를 사용하여 값을 가져 오는 함수가 필요합니다. $ a [ 'key'] 무엇이 잘못 되었습니까? – zod

+1

@zod : 키가 존재하지 않으면 PHP 오류가 발생합니다. 아래 답변에있는 것과 같은 함수를 사용하면 오류 메시지 대신 기본값을 얻을 수 있습니다. –

답변

10

isset()는 일반적으로 array_key_exists()보다 빠릅니다. 매개 변수 $default은 생략하면 빈 문자열로 초기화됩니다. 배열 키가 존재하지만 NULL 값이있는 경우는 NULL을 취급으로 존재하고 $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" 

그러나, isset(), 당신이 기대하는 방식으로 작동하지 않습니다. 배열에 NULL이 있으면 array_key_exists()을 사용해야합니다.

+2

나는 더 간단한 인수를 필요로하는 다른 도우미 함수를 만들었습니다. http://stackoverflow.com/a/25205195/1890285 – stepmuel

0

내 마음에 있음을 할 수있는 기본 기능이 없습니다.

귀하를 GetItem은 : 당신 싶어 무엇을

2

그렇진을 할 수있는 좋은 방법입니다. 이것은 똑같이 행동해야합니다. $res의 모든 코드 경로 결과가 덮어 쓰기로

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

함수의 첫 번째 라인은 쓸모가 없다. 트릭은 위와 같이 매개 변수를 선택적으로 만드는 것입니다.

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; 
} 
관련 문제