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);
}
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”}
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" }
}
}
- 3 回答
- 0 关注
- 225 浏览
添加回答
举报
