例如:
$arr = array('k1'=>1,'k2'=>2,'k3'=>3);
Run Code Online (Sandbox Code Playgroud)
如果我想获得$ arr ['k4'](意外指数),则会有一个通知:
Notice: undefined index......
Run Code Online (Sandbox Code Playgroud)
所以,我可以为数组设置dufalut值,就像ruby的哈希:
h = {'k1'=>1,'k2'=>2,'k3'=>3}
h.default = 'default'
puts h['k4']
Run Code Online (Sandbox Code Playgroud)
那么,我会得到'默认';
只是做一些检查,看看它是否存在:
isset($arr['k4'])?$arr['k4']:'default';
Run Code Online (Sandbox Code Playgroud)
或者为它做一个功能:
function get_key($key, $arr){
return isset($arr[$key])?$arr[$key]:'default';
}
//to use it:
get_key('k4', $arr);
Run Code Online (Sandbox Code Playgroud)
@ Neal的答案适用于通用用法,但是如果你有一组需要默认的预定义键,你总是可以将数组合并为默认值:
$arr = $arr + array('k1' => null, 'k2' => null, 'k3' => null, 'k4' => null);
Run Code Online (Sandbox Code Playgroud)
这样,如果$arr
定义任何这些键,它将需要预防.但是,如果没有,默认值将在那里.这样可以使选项数组变得容易,因为您可以为每个键定义不同的默认值.
编辑或者如果你想像ruby一样支持,只需扩展arrayobject就可以了:
class DefaultingArrayObject extends ArrayObject {
public $default = null;
public function __construct(array $array, $default = null) {
parent::__construct($array);
$this->default = $default;
}
public function offsetGet($key) {
if ($this->offsetExists($key)) {
return parent::offsetGet($key);
} else {
return $this->default;
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
$array = new DefaultingArrayObject($array);
$array->default = 'default';
echo $array['k4']; // 'default'
Run Code Online (Sandbox Code Playgroud)