对于PHP关联数组,是否有一个与Python字典setdefault等效的设置?

对于PHP关联数组,是否有一个与Python字典setdefault等效的设置?,php,arrays,Php,Arrays,Python字典是该语言的内置映射类型,它有一个方法,如果字典中的键已设置,则返回该键的值;如果尚未设置,则将该键设置为指定的默认值,然后返回该键 对于PHP中的关联数组,是否有一个等效的数组函数来执行此操作?答案是否定的,但您始终可以编写自己的数组函数 public function static setDefault(array &$array, $key, $default = 'None') { if(!array_key_exists($key, $array)){

Python字典是该语言的内置映射类型,它有一个方法,如果字典中的键已设置,则返回该键的值;如果尚未设置,则将该键设置为指定的默认值,然后返回该键


对于PHP中的关联数组,是否有一个等效的数组函数来执行此操作?

答案是否定的,但您始终可以编写自己的数组函数

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

    return $array[$key];
}

传统数组没有这样的属性,但您可以声明一个实现和行为类似于数组的类:

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'
类DefaultArray实现arrayaccess{
private$default='default Value';
私有$properties=[];
函数构造($default\u值){
$this->default=$default\u值;
}
函数偏移集($property,$value){
$this->properties[$property]=$value;
退还$this;
}
函数offsetGet($property){
返回isset($this->properties[$property])?$this->properties[$property]:$this->default;
}
函数offsetExists($property){
返回isset($this->properties[$property]);
}
函数offsetUnset($property){
未设置($this->properties[$offset]);
}
}
$myArray=新的DefaultArray(“我的默认值”);
$myArray['bye']='bye';

变量转储($myArray['bye']);//如果数组键不存在,您想返回它的默认值吗?您可以使用Null合并运算符@David.BC。:很高兴知道,但是如果尚未设置数组中的值,我还想设置该值。这样行吗$用户名=$ary['user']$ary['user']='nobody';谢谢在python中,
setdefault()
提供逐键默认值,而不是像您的示例中那样提供集合范围内的默认值,但是了解
实现arrayaccess仍然是件好事。遗憾的是,您不能像python那样使用它来链接:
foobar.setdefault(“level1”,“{}”).setdefault(“level2”,“{}”).setdefault(“key”,“value”)
@Flimm您可能可以,您需要更多的抽象,然后返回
$this