2012-03-21 13 views
14

Pythonでは、「get」メソッドを使用してエラーなしで辞書から値を取得できます。PHP:Pythonのように配列の値を取得しますか?

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; 
} 

は、PythonのようにPHPでbasicly同じ機能がありますか?

ありがとう: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()を使用すると、特に大きなアレイでは大幅な遅延が発生する可能性があることに注意してください。代替:

0

はい。または

function GetItem($Arr, $Key, $Default) { 
    return array_key_exists($Key, $Arr) 
     ? $Arr[$Key] 
     : $Default; 
} 
関連する問題