我的代码如下:
$arr1 = array();
$arr2 = array();
// [...] some code
$field_name = 'foo';
if (isset($arr1[$field_name])) {
$arr1[$field_name]++;
} else {
$arr1[$field_name] = 1;
}
$another_field_name = 'bar';
if (isset($arr2[$another_field_name])) {
$arr2[$another_field_name]++;
} else {
$arr2[$another_field_name] = 1;
}
还有更多数组和相同的ifelse
语句。
我想将这些语句重构为函数:
function ifelse_arr ($arr_name, $field_name) {
if (isset($arr_name[$field_name])) {
$arr_name[$field_name]++;
} else {
$arr_name[$field_name] = 1;
}
}
但是如何将数组名称和字段名称作为变量传递给函数?
答案 0 :(得分:1)
您不想传递数组或变量名,您希望自己传递数组和变量。
function ppIfIsset(array &$array, $field) {
$array[$field] = isset($array[$field]) ? $array[$field] + 1 : 1;
}
并称之为
ppIfIsset($arr1, 'foo');
使用&在函数参数之前,告诉该变量将由reference
传递答案 1 :(得分:0)
您可以考虑将数组放入父数组
$parent = array(
'arr_name1' => array(..),
'arr_name2' => array(..),
);
然后你可以将数组名称传递给函数并执行$parent[$arr_name][$field_name]
或者,您可以通过引用将数组传递给函数(函数arg的前缀为&
)。这将使您对函数中的$arr_name
所做的更改也会更改原始数组。
答案 2 :(得分:0)
我建议你在递增前用0初始化所有使用过的数组键。我这样做总是那样:
$arr1 += [$field_name => 0];
如果$ arr1具有键“$ field_name”,那么它将保持不变,否则它将被设置为0.然后你可以增加它。