亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在php中傳遞數組中的多個函數參數?

如何在php中傳遞數組中的多個函數參數?

PHP
慕的地6264312 2022-12-23 12:24:00
我想將多個參數傳遞給數組中的函數。參數本身是字符串數組。我有一個名為 的函數new_action(),我通過以下方式調用它:new_action(array('actions' => array('ACTION1','ACTION2'), 'tables' => array('table1','table2')));該功能如下所示:public function new_action($params=array()) {  $tables = array();  $actions = array();  if(count($params)) {    foreach($params as $k => $v) {      $tables  = ($k == 'tables')  ? $v : array();      $actions = ($k == 'actions') ? $v : array();    }    // Do useful stuff with the variables here ...    var_dump($tables);    var_dump($actions);    // ======== ACTUAL OUTPUT: ========    // array(0) { }    // array(0) { }    // ======== EXPECTED OUTPUT: ========    // array(2) { [0]=> string(6) "table1" [1]=> string(6) "table2" }    // array(2) { [0]=> string(7) "ACTION1" [1]=> string(7) "ACTION2" }  } }如您所見,$v循環內(字符串數組)的值永遠不會被復制到變量$tables或$actions循環外。我認為這很可能是范圍問題,但查看與此類似的其他問題的答案并沒有為我闡明解決方案。我如何重構代碼,以便我可以訪問存儲在循環外的$v每個數組?$kforeach
查看完整描述

3 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

您的代碼正在覆蓋之前設置的內容,因為您將值設置為array()當鍵不匹配tables或時actions。所以當 $k == 'tables',$actions被設置回一個空數組。


取而代之的是三元運算符,基本上是一個if/else, 重構為只是一個if如果你想保持循環:


foreach($params as $k => $v) {

        if ($k == 'tables') {

            $tables = $v;

        }

        if ($k == 'actions') {

            $actions = $v;

        }


    }

或者它可以通過在開始時顯式檢查這些鍵而不是循環來壓縮一點:


function new_action($params=array()) {


    $tables = isset($params['tables']) ? $params['tables'] : array();


    $actions = isset($params['actions']) ? $params['actions'] : array();


    // Do useful stuff with the variables here ...

    var_dump($tables);

    var_dump($actions);


}


查看完整回答
反對 回復 2022-12-23
?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

這些值是空的,因為使用 foreach 會覆蓋現有值。


您甚至可以將其編寫得更簡單,并使用帶括號的數組速記語法來提高可讀性。


空合并運算符是避免書寫的語法糖,isset()也是三元的。如果已設置,它將返回其內容,否則設置為空數組。


new_action(['actions' => ['ACTION1', 'ACTION2'], 'tables' => ['table1', 'table2']]);


function new_action($p = array()): void {

    $tables  = $p['tables']  ?? [];

    $actions = $p['actions'] ?? [];


    var_dump($tables);

    var_dump($actions);

}


array(2) { [0] => string(6) "table1" [1] => string(6) "table2" }

array(2) { [0] => string(7) "ACTION1" [1] => 字符串(7)“ACTION2”}


查看完整回答
反對 回復 2022-12-23
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

您實際上不需要 foreach 來獲取該輸出:


public function new_action($params = array()) {

  $tables = array_key_exists('tables', $params) ? $params['tables'] : [];

  $actions = array_key_exists('actions', $params) ? $params['actions'] : [];


  // Do useful stuff with the variables here ...

  var_dump($tables); // Outputs => array(2) { [0]=> string(6) "table1" [1]=> string(6) "table2" }

  var_dump($actions); // Outputs => array(2) { [0]=> string(7) "ACTION1" [1]=> string(7) "ACTION2" }

  } 

}


查看完整回答
反對 回復 2022-12-23
  • 3 回答
  • 0 關注
  • 191 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號