2013-07-31 70 views
0

我需要知道如何將數組傳遞給函數作爲獨立變量,例如,PHP通陣列作爲獨立變量

function myfunction($var, $othervar) { 
} 

$myarray = array('key'=>'val', 'data'=>'pair'); 

這裏是我遇到的問題,下面沒有按」不像是會工作:

$return = myfunction(extract($myarray)); 

應該,如果我理解正確的話,基本上是一樣的

$return = myfunction($key, $data); 

其中$ key ='val'和$ data ='pair'

任何人都可以請給我解釋一下。

+2

你要找的'call_user_func_array()' – mario

+1

的可能重複[PHP:數組變量函數的參數值(http://stackoverflow.com/questions/ 1793782/php-array-to-variable-function-parameter-values) – mario

+0

或'array_walk()'? – cheesemacfly

回答

0

如果我理解你的問題的權利那就試試這個

$return = myfunction($myarray["key"],$myarray["data"]); 

這裏我們只是傳遞關聯數組作爲參數。

+0

這是有用的,但問題是,我不知道有多少變量或密鑰是什麼,我會張貼在 – user1205600

+0

以下答案的完整代碼,我應該忽略'嚴格的標準'的錯誤信息,並使用call_user_func_array? – user1205600

+0

使用編輯選項將它們添加到您的實際問題中。 – Shashi

0
public function get($key=null, $function='', array $vars=array()) { 
     if ($key==null || !array_key_exists($key, $this->_obj)) { 
      return null; 
     } 

var_dump($vars); 

     if (!empty($function)) { 
      return $this->_obj[$key]->$function(array_walk($vars)); 
//   return call_user_func_array(array(get_class($this->_obj[$key]), $function), $vars); 
//   return $this->_obj[$key]->$function(extract($vars)); 
     } 
     return $this->_obj[$key]; 
    } 
+0

現在與call_user_func_array我得到這個:當不是在C:\ aDomain \ profordable \ lib \ Class_Database.php中的對象上下文中使用$ this,因爲顯然使用call_user_function_array(array('class','function'), $ vars)以數組作爲函數名稱,靜態調用方法 – user1205600

+0

我將call_user_func_array中的類作爲字符串傳遞,而不是作爲對象傳遞,現在我已經在下面,它似乎工作,儘管更多的輸入是讚賞 – user1205600

0
public function get($key=null, $function='', array $vars=array()) { 
     if ($key==null || !array_key_exists($key, $this->_obj)) { 
      return null; 
     } 
     if (!empty($function)) { 
      return call_user_func_array(array($this->_obj[$key], $function), $vars); 
     } 
     return $this->_obj[$key]; 
    } 

$registry = Registry_Object::Singleton(); 
//...later on 
$registry = $GLOBALS['registry']; 
$registry->set('Content', new Content($_SERVER['REQUEST_URI'])); 
$id = $registry->get('Content', 'GetIdFunc'); 
$registry->set('DB', 'Database'); 
$query = $registry->get('DB', 'Read', array("SELECT TITLE, CONTENT FROM APP_CONTENT WHERE ID=$id")); 
print '<h1>'.$query[0]['TITLE'].'</h1>'; 
print Template_Helper::TPL_Paragraphs($query[0]['CONTENT']); 

感謝所有