Как можно реорганизовать эту управляющую структуру логики PHP?

Моя интуиция подсказывает мне, что есть лучший, возможно, однострочный рефакторинг для следующего кода:

if (isset($x))
{
    if (isset($y))
    {
        $z = array_merge($x,$y);
    }
    else
    {
        $z = $x;
    }
}
else
{
    $z = $y;
}

Если бы меня не беспокоили ошибки предупреждений, сработало бы простое array_merge($x,$y), но я хотел бы знать, как это сделать лучше. Мысли?


person pbarney    schedule 04.12.2011    source источник


Ответы (1)


$z = array_merge(
    isset($x) ? $x : array(),
    isset($y) ? $y : array()
);

Это вернет пустой массив, если $x и $y не установлены. Если установлен только один, он вернет этот массив. Если оба установлены, он вернет результат array_merge() прогона массивов.

Это не совсем то поведение вашего кода выше, но я считаю, что это то поведение, которое вы хотели. (Я полагаю, что в вашем коде $z не будет массивом, если оба $x и $y не установлены.)

Кстати, этот код предполагает, что если установлены $x и $y, то это массивы. Если это не так, вы должны либо запустить is_array() для них, чтобы убедиться, что они являются массивами, либо использовать жонглирование типами, чтобы убедиться, что они являются массивами при запуске array_merge().

person Trott    schedule 04.12.2011
comment
Отличный ответ, и возврат пустого массива помогает мне избежать проверки is_array() позже. Спасибо! - person pbarney; 04.12.2011