2013-05-26 82 views
0

有了這個:獲取項,assoctivate陣列

//Example array 
$arr = array(
'db' => array('host' => 'local', 'user' => 'root')); 


    public function getParam($name, $default = null) 
     { 
      if (array_key_exists($name, $this->params)) { 
       return $this->params[$name]; 
      } 

      return $default; 
     } 

我可以得到整個分貝數組,但如果我想達到的「主機」只能用getParam()方法,我怎麼需要延長getParam方法是否靈活,並且在每個非連續數組中有多深?

+0

您需要編寫一個遞歸函數來鑽取數組 – 2013-05-26 22:41:41

+0

如果您使用的是PHP 5.4,您可以使用:$ obj-> getParam(「db」)['host'];' –

回答

0

不知道是否有更好的解決方案,但我可能會做一個遞歸解決方案。這樣的事情:

public function getParam($name, $default = null, $arrayToCheck = false) 
{ 
    if (!$arrayToCheck) 
     $arrayToCheck = $this->params; 

    if (array_key_exists($name, $arrayToCheck)) { 
     return $arrayToCheck[$name]; 
    } 

    // if we get here, we haven't found it 
    foreach($arrayToCheck as $arrayItem) 
    { 
     if (is_array($arrayItem)) 
     { 
      return $this->getParam($name, $default, $arrayItem); 
     } 
    } 


    return $default; 
} 

這將通過您的數組遞歸搜索您的密鑰並返回匹配的第一個值。