2017-03-20 5 views
0

Python辞書では、言語のビルトインマッピングタイプはsetdefault()メソッドを持っています。すでに設定されている場合は辞書のキーの値を返します。または、そのキーを指定されたデフォルトに設定し、セット。PHP連想配列のPython辞書setdefaultに相当するものはありますか?

PHPで連想配列にこれを行うための同等の配列関数はありますか?

+0

配列キーが存在しない場合は、配列キーのデフォルト値を返したいですか?ヌル合体演算子http://php.net/manual/fr/migration70.new-features.php – Incognito

+0

@ David.BC .:知っておいてよかったですが、そうでなければ配列の値を設定したいすでに設定されています。これは効果がありますか? $ username = $ ary ['user'] ?? $ ary ['user'] = '誰も'; –

答えて

1

答えはノーですが、あなたは常にあなた自身の

public function static setDefault(array &$array, $key, $default = 'None') 
{ 
    if(!array_key_exists($key, $array)){ 
     $array[$key] = $default; 
    } 

    return $array[$key]; 
} 
1

あり、伝統的な配列のため、このようなプロパティがありませんが、ArrayAccessを実装し、配列のように振る舞うクラスを宣言することができます書き込むことができます。

class DefaultArray implements arrayaccess { 

    private $default='Default Value'; 

    private $properties=[]; 

    function __construct($default_value) { 
     $this->default=$default_value; 
    } 

    function offsetSet($property, $value) { 
     $this->properties[$property]=$value; 
     return $this; 
    } 

    function offsetGet($property) { 
     return isset($this->properties[$property])? $this->properties[$property]:$this->default; 
    } 

    function offsetExists($property) { 
     return isset($this->properties[$property]); 
    } 

    function offsetUnset($property) { 
     unset($this->properties[$offset]); 
    } 
} 


$myArray=new DefaultArray('my default value'); 

$myArray['bye'] = 'goodbye'; 

var_dump($myArray['bye']); // <-- would print 'goodbye' 
var_dump($myArray['hello']); // <-- would print 'my default value' 

ユースケースによっては、シリアル化するときにも配列のように動作するメソッドを追加することができます。

+0

ありがとうございます。 Pythonの 'setdefault()'は、あなたの例のようなコレクション全体のデフォルトではなく、キーごとのデフォルトを提供しますが、 'array_access'を実装することについてはまだ学んでいます。 –

関連する問題