我正在寻找一种更优雅或更有效的方法来处理这种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; }
答案 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'];