2011-05-17 127 views
7

如:如何设置阵列(PHP)的默认值

$arr = array('k1'=>1,'k2'=>2,'k3'=>3); 

如果我想获得$改编[ 'K4'](unexpect指数),有一个通知:

Notice: undefined index...... 

所以,我可以设置阵列dufalut值,如红宝石的哈希:

h = {'k1'=>1,'k2'=>2,'k3'=>3} 
h.default = 'default' 
puts h['k4'] 

然后,我会得到“默认”;

回答

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); 
+0

@psjscs没有问题^ _ ^记得选择接受答案时可以:-D – Neal 2011-05-17 15:04:35

+0

get_key函数是有用的,谢谢!〜 – psjscs 2011-05-17 15:15:07

5

@尼尔的回答是好普通的用法,但如果你有一组需要默认的预定义密钥集合,您可以始终将该阵列与默认值合并:

$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' 
+0

这不是很动态 – Neal 2011-05-17 15:08:18

+0

@neal:它不应该是动态的。它应该是当你有特定的键时,你期待。两者都有有效的使用情况...... – ircmaxell 2011-05-17 15:10:41