首页 > 解决方案 > 如何在php中的数组中传递多个函数参数?

问题描述

我想将多个参数传递给数组中的函数。参数本身是字符串数组。

我有一个名为 的函数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每个循环$k外的那些数组?foreach

标签: phparraysforeach

解决方案


您的代码正在覆盖之前设置的内容,因为您将值设置为array()当键不匹配时tablesactions. 所以当 $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);

}

推荐阅读