0

我有如下代码:

$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;
    }
}

但是如何将数组名和字段名作为变量传递给函数呢?

4

3 回答 3

1

你不想传递数组或变量名,你想传递数组和变量本身。

function ppIfIsset(array &$array, $field) {
    $array[$field] = isset($array[$field]) ? $array[$field] + 1 : 1;    
}

并称它为

ppIfIsset($arr1, 'foo');

在函数参数之前使用 &,告诉该变量将通过引用传递

于 2013-09-22T13:11:04.183 回答
0

您可以考虑将数组放入父数组

$parent = array(
  'arr_name1' => array(..),
  'arr_name2' => array(..),
);

然后你可以将数组名称传递给函数并执行$parent[$arr_name][$field_name]

或者,您可以通过引用将数组传递给函数(在函数 arg 前加上 a &)。这将使您$arr_name对函数中的更改也更改原始数组。

于 2013-09-22T13:12:39.957 回答
0

我建议您在递增之前用 0 初始化所有使用的数组键。我总是这样做:

$arr1 += [$field_name => 0];

如果 $arr1 有键 "$field_name" 那么它将保持不变,否则它将被设置为 0。然后你可以增加它。

于 2013-09-22T13:16:31.610 回答