如何将这些if else语句重构为函数

时间:2013-09-22 13:06:39

标签: php

我的代码如下:

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

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

3 个答案:

答案 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.然后你可以增加它。