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