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

インクリメントする前に、使用されているすべての配列キーを 0 で初期化することをお勧めします。私はいつもそれを単純に次のように行います。

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

$arr1 にキー "$field_name" がある場合、それは変更されずに残ります。それ以外の場合は 0 に設定されます。その後、インクリメントできます。

于 2013-09-22T13:16:31.610 に答える