e.g:
$arr = array('k1'=>1,'k2'=>2,'k3'=>3);
如果我想获得$ arr ['k4'](意外指数),则会有通知:
Notice: undefined index......
所以,我可以为数组设置dufalut值,就像ruby的哈希:
h = {'k1'=>1,'k2'=>2,'k3'=>3}
h.default = 'default'
puts h['k4']
然后,我会得到'默认';
答案 0 :(得分:8)
只需进行某种检查以确定它是否存在:
isset($arr['k4'])?$arr['k4']:'default';
或者为它做一个功能:
function get_key($key, $arr){
return isset($arr[$key])?$arr[$key]:'default';
}
//to use it:
get_key('k4', $arr);
答案 1 :(得分:5)
@ Neal的答案适用于通用用法,但如果你有一组需要默认的预定义键,你总是可以将数组合并为默认值:
$arr = $arr + array('k1' => null, 'k2' => null, 'k3' => null, 'k4' => null);
这样,如果$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;
}
}
}
用法:
$array = new DefaultingArrayObject($array);
$array->default = 'default';
echo $array['k4']; // 'default'