1

通常、私は次のようなものを使用して逃げることができます:

$a = ($condition)? array(1,2,3) : '';

しかし、今は多次元配列を受け入れるメソッドがあり、条件付きで配列の1つを渡すかどうかを指定する必要があります。

$this->mymethod(
    'myarrays'=> array(
        array('key' => 'lang_code'),
        array('key' => 'lang_description'),
        array('key' => 'lang_direction'),
        ($mycondition==true)? array('key' => 'lang_export') : ),
    )
);

基本的に、問題は最後に渡された配列にあります。より具体的には、三項If演算子のELSEステートメント。:の後に単に空白を渡すことはできないようです。また、コードの後半でこの配列を実行するforeachでエラーが発生するため、FALSEや''(空の文字列)などを渡すことはできません。

私の質問は: 条件に基づいて関数/メソッドにパラメーターを渡す方法は?

4

4 に答える 4

1

使用する:

$mycondition? array('key' => 'lang_export') : null

これで、単純に実行して、その要素array_filter(..)を削除できます。NULL

于 2012-07-11T08:22:42.820 に答える
1
array_filter(array(
    array('key' => 'lang_code'),
    array('key' => 'lang_description'),
    array('key' => 'lang_direction'),
    $mycondition ? array('key' => 'lang_export') : null),
));

これにより、null

于 2012-07-11T08:26:11.437 に答える
1

入力を減らす方法ではなく、読みやすさを目指してください。三項演算子は、場合によっては読みやすさが向上するため、優れています。これは確かにそうではありません。

あなた自身を含め、後であなたのコードを読んでいる人々に親切にしてください。

ここに例があります(コメントは将来の読者の考えです):

//OK, so here we have an array
$array = array(
    array('key' => 'lang_code'),
    array('key' => 'lang_description'),
    array('key' => 'lang_direction'),
);

//So the array can have one more element based on this condition
if ($mycondition) {
     $array[] = array('key' => 'lang_export');
}

//And then we pass this array to the method
$this->mymethod(array('myarrays' => $array));

変数は自由に使用でき、すべてのコードを1つのステートメントに記述する必要はありません(まあ、以前はクールだと思っていたことを認めなければなりません)。

于 2012-07-11T08:28:00.970 に答える
0

関数呼び出しの前に、たとえばヘルパー関数を使用して条件を評価できます。

function evaluate_condition (array $mandatory, array $optional, $condition) {
    if (true === $condition) {
        $mandatory[] = $optional;
    }
    return $mandatory;
}

$this->mymethod(
    'myarrays'=> $this->evaluate_condition(
        array(
            array('key' => 'lang_code'),
            array('key' => 'lang_description'),
            array('key' => 'lang_direction')
        ),
        array('key' => 'lang_export'),
        $mycondition
    )
);
于 2012-07-11T08:31:18.927 に答える