2011-05-17 124 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