【问题标题】:Using an If-else within an array在数组中使用 If-else
【发布时间】:2011-07-12 13:38:00
【问题描述】:

我不知道这是否可行,或者是否有其他方法可以做到这一点,但我们将不胜感激。我想要做的是单独关闭数组。所以我有这个:

<?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 then 来控制另一个数组?如果是这样,它将如何工作?这只是数组的一部分,还有更多选项和部分,我只是为了简单起见将它们取出,因为一旦我了解如何做一次,它就很容易扩展。

【问题讨论】:

  • 不可能将代码放入数组中,但我不明白这一点。数组只是一种数据结构,您不需要“切换”它包含的内容,只是在不需要时不要提取/打印/任何部分
  • 供您参考,PHP 有一个布尔类型,您不必使用字符串。

标签: php arrays if-statement


【解决方案1】:

是的,这可以使用某种速记:

<?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

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

【讨论】:

  • 我现在该怎么做这个问题。稍微编辑了一下,所以我明白了。谢谢
  • 您可以对另一个使用相同的方法,也可以使用其他人正在谈论的其他更简单的方法之一。我只给你这个答案是因为我认为你的真实代码更复杂,但对于这种情况有更简单的解决方案。
  • 请编辑您的答案。我收到语法错误,但看不到我的错误。谢谢
  • 更新了,这是一个简单的复制粘贴案例。
  • 谢谢。我省略了 ,这会造成问题。
【解决方案2】:

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

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

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

【讨论】:

  • 根据你的例子,我已经证明了这个问题的明确答案! +1 谢谢!
  • 如何避免key 'b'
【解决方案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" => ""
                                  )
                             );
}

【讨论】:

  • 我稍微编辑了我的问题以更好地解释它。我将如何将您的解释用于控制内部数组而不是外部数组的新问题。谢谢
【解决方案4】:

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

例如:

$arrLayout = array();

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

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

【讨论】:

    【解决方案5】:

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

    带功能:

    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" => ""
            )
        );
    }
    ?>
    

    【讨论】:

      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        你可以这样做:

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

        【讨论】:

          【解决方案8】:

          你可以使用推送吗?

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

          【讨论】:

            【解决方案9】:

            在某种程度上,是的。

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

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

            【讨论】:

              【解决方案10】:

              遇到这个问题,是在设置PDO调试模式的时候,依赖于配置设置。

              上面的例子很好,但有点模棱两可,所以我决定写另一个简单的例子来说明如何做到这一点:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2015-11-03
                • 1970-01-01
                • 2015-02-14
                • 1970-01-01
                • 2019-04-25
                • 1970-01-01
                相关资源
                最近更新 更多