处理此PHP条件的更优化或有效方法

时间:2018-03-18 06:16:49

标签: php arrays if-statement optimization syntax

我正在寻找一种更优雅或更有效的方法来处理这种if语句。我对PHP有点新鲜,虽然下面的脚本有效,但对我来说这看起来有点奇怪,而且我非常确定有更好的方法(性能和/或结构明智)来处理这样的情况。

我有一个数组 $ atts ,其中可以有两个值: border-top border-bottom

这些来自您可以选择的两个复选框,因此有4种组合。一个,两个,或者没有。

我的代码:

// First check
$border = '';
if ( ! empty( $atts['border']['border-top'] ) ) {
    $border_top = $atts['border']['border-top'];
}
if ( ! empty( $atts['border']['border-bottom'] ) ) {
    $border_bottom = $atts['border']['border-bottom'];
}

// Create the class
if ( ! empty( $border_top) ) {
    if ( ! empty( $border_bottom) ) {
        $border = 'border-top-and-bottom';
    } else {
        $border = 'border-top';
    }
} else {
    $border = 'border-bottom';
}

// Add class to the main array
if ( ! empty( $border ) ) { $attributes['class']['border'] = $border; }

为什么我这样做:

首先检查:前两个if语句用于检查它们是否完全设置,因为它们不是布尔值。如果我没有选中复选框,则没有0值,但不会在 $ atts 中创建值。如果没有前两个if语句,我将收到PHP错误。

创建课程:在这里,我尝试查看已设置的组合。顶部和底部,只有这两个中的一个或没有。我认为,特别是这部分代码可以用更优雅的方式。

添加类:这里我将部件的结果作为新条目添加到最终数组之前,如果没有选中任何复选框,则不添加。

我的意思是,到目前为止,它似乎像预期的那样工作......我只是好奇是否有更好更短的方法来解决这种情况,然后是所有这些if语句。

编辑:

好的,在编辑器外面看着它,我注意到它非常愚蠢,因为第一部分和中间部分有点做同样的事情。我已经把它缩小了:

$border = '';
if ( ! empty( $atts['border']['border-top'] ) ) {
    if ( ! empty( $atts['border']['border-bottom'] ) ) {
        $border = 'border-top-and-bottom';
    } else {
        $border = 'border-top';
    }
} elseif ( ! empty( $atts['border']['border-bottom'] ) ) {
    $border = 'border-bottom';
}
if ( ! empty( $border ) ) { $attributes['class']['border'] = $border; }

1 个答案:

答案 0 :(得分:0)

您可以使用PHP的三元运算符:
该行将减少程序中的变量名称:

$array = $atts['border'];

之后将测试border-top的值,此行表示:
"如果$ array [' border-top']不为空,则$ top值将为' border-top',否则$ top值将为null"

$top = (!empty($array['border-top'])) ? 'border-top' : '';

border-bottom值的同一行:

$bottom = (!empty($array['border-bottom'])) ? 'border-bottom' : '';

然后我们混合var,这一行意味着:
"如果$ top和$ bottom不为空,$ border值将为$ top +' -and-bottom',否则,$ border值将为$ top + $ bottom(一个为空)"

$border = (!empty($top) && !empty($bottom)) ? $top.'-and-bottom' : $top.$bottom;

然后我们设置var:

$attributes['class']['border'] = (!empty($border)) ? $border : '';
echo $attributes['class']['border'];

决赛:

$array = $atts['border'];
$top = (!empty($array['border-top'])) ? 'border-top' : '';
$bottom = (!empty($array['border-bottom'])) ? 'border-bottom' : '';
$border = (!empty($top) && !empty($bottom)) ? $top.'-and-bottom' : $top.$bottom;
$attributes['class']['border'] = (!empty($border)) ? $border : '';
echo $attributes['class']['border'];
相关问题