为了账号安全,请及时绑定邮箱和手机立即绑定

如何在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 关注
  • 225 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号