如何重构这个PHP逻辑控制结构?

如何重构这个PHP逻辑控制结构?,php,if-statement,refactoring,control-structure,Php,If Statement,Refactoring,Control Structure,我的直觉告诉我,下面的代码有一个更好的,也许是一行重构: if (isset($x)) { if (isset($y)) { $z = array_merge($x,$y); } else { $z = $x; } } else { $z = $y; } 如果我不担心警告错误,一个简单的array\u merge($x,$y)就可以了,但我想知道一个更好的方法。想法 $z = array_merge(

我的直觉告诉我,下面的代码有一个更好的,也许是一行重构:

if (isset($x))
{
    if (isset($y))
    {
        $z = array_merge($x,$y);
    }
    else
    {
        $z = $x;
    }
}
else
{
    $z = $y;
}
如果我不担心警告错误,一个简单的
array\u merge($x,$y)
就可以了,但我想知道一个更好的方法。想法

$z = array_merge(
    isset($x) ? $x : array(),
    isset($y) ? $y : array()
);
如果未设置
$x
$y
,则将返回空数组。如果只设置了一个,它将返回该数组。如果两者都设置了,它将返回在数组上运行的
array\u merge()
的结果

这并不是上面代码的行为,但我相信这是您想要的行为。(我相信,在您的代码中,
$z
如果未同时设置
$x
$y
,则不会是数组。)

顺便说一下,此代码假定如果设置了
$x
$y
,则它们是数组。如果不是这样,您应该在它们上运行
is\u array()
以确认它们是数组,或者在运行
array\u merge()
时使用以确保它们是数组

如果未设置
$x
$y
,则将返回空数组。如果只设置了一个,它将返回该数组。如果两者都设置了,它将返回在数组上运行的
array\u merge()
的结果

这并不是上面代码的行为,但我相信这是您想要的行为。(我相信,在您的代码中,
$z
如果未同时设置
$x
$y
,则不会是数组。)


顺便说一下,此代码假定如果设置了
$x
$y
,则它们是数组。如果不是这样,您应该对它们运行
is\u array()
以确认它们是数组,或者在运行
array\u merge()
时使用以确保它们是数组。

回答得很好,返回空数组有助于我避免稍后检查is\u array()。非常感谢。回答得很好,返回一个空白数组可以帮助我避免稍后检查is_array()。非常感谢。