如何设置数组的默认值(php)

时间:2011-05-17 14:55:01

标签: php

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']

然后,我会得到'默认';

2 个答案:

答案 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'