php - 如何在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
解决方案
您的代码正在覆盖之前设置的内容,因为您将值设置为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);
}
推荐阅读
- python-3.x - 如何向 Matplotlib 图添加额外的信息点?
- c - AVR UART 读取单个字节两次
- android - 嵌套 RecyclerView + ItemDecorator + DiffUtil 的问题
- python - 用 Python 对 PowerPoint 图表数据进行排序?
- reactjs - 如何在 React.js 中增加文件池放置区域的尺寸?
- php - 如果菜单有子菜单,如何将项目添加到 wp_nav_menu
- node.js - NodeJS:获取 RangeError:超出最大调用堆栈大小
- java - 如何从属性文件加载 ClientCredentialsResourceDetails 所需的参数
- xamarin.forms - Azure AD (ADAL) 登录屏幕丢失在 Android Only-XamarinForms.Android 的设备方向上输入的用户电子邮件
- javascript - 使用循环从多维数组中获取数据