3 回答

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個贊
您的代碼正在覆蓋之前設(shè)置的內(nèi)容,因?yàn)槟鷮⒅翟O(shè)置為array()當(dāng)鍵不匹配tables或時actions。所以當(dāng) $k == 'tables',$actions被設(shè)置回一個空數(shù)組。
取而代之的是三元運(yùn)算符,基本上是一個if/else, 重構(gòu)為只是一個if如果你想保持循環(huán):
foreach($params as $k => $v) {
if ($k == 'tables') {
$tables = $v;
}
if ($k == 'actions') {
$actions = $v;
}
}
或者它可以通過在開始時顯式檢查這些鍵而不是循環(huán)來壓縮一點(diǎn):
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貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個贊
這些值是空的,因?yàn)槭褂?foreach 會覆蓋現(xiàn)有值。
您甚至可以將其編寫得更簡單,并使用帶括號的數(shù)組速記語法來提高可讀性。
空合并運(yùn)算符是避免書寫的語法糖,isset()也是三元的。如果已設(shè)置,它將返回其內(nèi)容,否則設(shè)置為空數(shù)組。
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貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個贊
您實(shí)際上不需要 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 關(guān)注
- 200 瀏覽
添加回答
舉報(bào)