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

psj*_*scs 7 php

例如:

$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)

那么,我会得到'默认';

Nea*_*eal 8

只是做一些检查,看看它是否存在:

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)


irc*_*ell 5

@ 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)