在数组中使用If-else

时间:2011-07-12 13:38:01

标签: php arrays if-statement

大家好我不知道这是否可行,或者是否有其他方式可以做到,但任何帮助都会受到赞赏。我要做的是单独关闭数组。所以我有这个..

<?php
$arrLayout = array(
    "section1" => array(

        "wLibrary" => array(
            "title" => "XBMC Library",
            "display" => ""
        ),

        "wControl" => array(
            "title" => "Control",
            "display" => ""
        )
        )
            )
?>

我想要的是这个

<?php

$LibraryStatus='true'

$arrLayout = array(
    "section1" => array(

                  if $LibraryStatus='true' (

        "wLibrary" => array(
            "title" => "XBMC Library",
            "display" => ""
        ),
                  else blank.      

              if $ControlStatus='true' (

    "wControl" => array(
            "title" => "Control",
            "display" => ""
        )
    )
            )
?>

如果它是假的,那么它显然也是空白的。是否有可能在一个控制另一个数组的数组中有一个if?如果是这样,它将如何运作?这只是数组的一部分有更多的选项和部分我只是简单地将它们拿出来,因为一旦我理解了如何做到这一点就很容易扩展。

由于

10 个答案:

答案 0 :(得分:10)

是的,这可以使用某种简写:

<?php

$LibraryStatus = $ControlStatus = true;

$arrLayout = array(
             "section1" => array(
             ($LibraryStatus ? array("wLibrary" => array("title"   => "XMBC Library",
                                                         "display" => "")) : false),
             ($ControlStatus ? array("wControl" => array("title"   => "Control",
                                                         "display" => "")) : false)));

print_r($arrLayout);

?>

它的工作原理如下:

if($a == $b){ echo 'a'; }else{ echo 'b'; }

等于

echo $a == $b ? 'a' : 'b';

如果使用这种速记,它将始终返回输出,因此您可以将它放在括号之间并将其放在数组之间。

http://codepad.org/cxp0M0oL

但是对于这种情况,还有其他解决方案。

答案 1 :(得分:6)

在数组中,您可以使用三元运算符:

$a = array(
    'b' => $expression == true ? 'myWord' : '';
);

但在你的例子中,更好的方法是将if语句移到数组之外。

答案 2 :(得分:3)

你不必要地使事情变得复杂。

如果您要分配的条件和值足够简单,您可以使用三元运算符(?:),如下所示:

$condition = true;
$arrLayout = array(
    "section1" => $condition ?
                     array(
                         "wLibrary" => array(
                             "title" => "XBMC Library",
                             "display" => ""
                         )
                     ) : false,
)

然而,即使对于简单的情况,这也不是很易读,我认为这是一个非常值得怀疑的做法。保持尽可能简单要好得多:

$condition = true;
$arrLayout = array(
    "section1" => false
);

if($condition) {
    $arrLayout["section1"] = array(
                                  "wLibrary" => array(
                                     "title" => "XBMC Library",
                                     "display" => ""
                                  )
                             );
}

答案 3 :(得分:1)

你的建议是不可能的。在创建数组后,您需要根据if / else条件添加变量。

例如:

$arrLayout = array();

if($LibraryStatus) {
    $arrLayout['section1'] = array("wLibrary" => array(
            "title" => "XBMC Library",
            "display" => ""
        ));
}

由于您的数组结构,这仍然相当不整洁,如果可以,我会尝试删除一些密钥,例如,您是否需要section1?你可以让PHP通过$arrLayout[] = array(..)添加一个数字键,在数组中创建一个新的'row',你仍然可以循环。

答案 4 :(得分:1)

另一种方法是将逻辑包含在函数中或通过包含文件。

功能:     

function section1Function($status = false){
    if ($status){
        return array(
            "wLibrary" => array(
                "title" => "XBMC Library",
                "display" => ""
            )
        );
    } else {
        return array(
            "wControl" => array(
                "title" => "Control",
                "display" => ""
            )
        );
    }
}

$LibraryStatus='true'

$arrLayout = array(
    "section1" => section1Function($LibraryStatus),
)

?>

使用包含文件:

<?php


$LibraryStatus='true'

$arrLayout = array(
    "section1" => require( dirname(__FILE__) .'/section1Layout.php'),
)

?>

section1Layout.php:

<?php
if ($LibraryStatus){
    return array(
        "wLibrary" => array(
            "title" => "XBMC Library",
            "display" => ""
        )
    );
} else {
    return array(
        "wControl" => array(
            "title" => "Control",
            "display" => ""
        )
    );
}
?>

答案 5 :(得分:0)

不,你不能在数组声明的中间有一个if-else块。但是,您可以通过不同方式操作数组以获得所需的结果。请参阅array functions

答案 6 :(得分:0)

你可以这样做:

$emptyArray = array();
$arrLayout = array("section1" => $emptyArray);

$LibraryStatus= true ;
if ($LibraryStatus=== true) {
     $arrLayout["section1"]["wlibrary"] =  array("title" => "XBMC Library","display" => "" );
}

答案 7 :(得分:0)

你可以使用push吗?

<?php

$LibraryStatus='true'

$arrLayout = array();
if ($LibraryStatus=='true') {
push($arrLayout["section1"], array(
        "wLibrary" => array(
            "title" => "XBMC Library",
            "display" => ""
        ));
}
?>

答案 8 :(得分:0)

在某种程度上,是的。

你不能把它放在你问过的地方(直接打开一个数组后) 您不能使用if语句。 你可以使用三元(条件)? true:false

<?php

$LibraryStatus = 'true';

$array = array(
    "section1" => ($LibraryStatus == 'true') ? array("wLibrary" => array("title" =>     "Title","display" => "")) : array()  
);

?>

答案 9 :(得分:0)

在设置 PDO调试模式时遇到此问题,这取决于配置设置。

上面的例子很棒,但有点含糊不清,所以我决定写另一个简单的例子:

array(
    'key' => $variable ? 'Sets certain value if $variable === true' : 'Sets certain value if $variable === false'
);