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 關注
- 191 瀏覽
添加回答
舉報