Использование If-else в массиве - PullRequest
7 голосов
/ 12 июля 2011

Привет, ребята. Я понятия не имею, возможно ли это или есть другой способ сделать это, но любая помощь будет принята с благодарностью.То, что я пытаюсь сделать, это отключить массивы по отдельности.Итак, у меня есть это ..

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

11 голосов
/ 12 июля 2011

Да, это возможно, используя определенные сокращения:

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

Но для этой конкретной ситуации есть и другие решения.

6 голосов
/ 12 июля 2011

Внутри массива вы можете использовать тернарный оператор:

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

Но в вашем примере лучше переместить оператор if за пределы вашего массива.

3 голосов
/ 12 июля 2011

Вы все усложняете без необходимости.

Если условие и значения, которые вы хотите присвоить, достаточно просты, вы можете использовать троичный оператор (?:), например:

$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" => ""
                                  )
                             );
}
1 голос
/ 21 ноября 2012

Другой способ - включить логику в функцию или через файл включения.

С функцией:

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" => ""
        )
    );
}
?>
1 голос
/ 12 июля 2011

То, что вы предлагаете, невозможно. Вам нужно добавить переменные, основанные на условном условии if / else после того, как вы создали массив.

Например:

$arrLayout = array();

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

Это все еще довольно неопрятно из-за структуры вашего массива, я бы попробовал исключить некоторые ключи, если вы можете, например, вам нужен section1? Вы можете просто позволить PHP добавить числовой ключ, выполнив команду $arrLayout[] = array(..), которая создаст новую «строку» в массиве, которую вы все еще можете просмотреть.

0 голосов
/ 10 января 2014

Обнаружена эта проблема, когда настраивался режим Отладка PDO , который зависит от настроек конфигурации.

Примеры выше были отличными, но немного двусмысленными, поэтому я решил написать еще один простой пример того, как это сделать:

array(
    'key' => $variable ? 'Sets certain value if $variable === true' : 'Sets certain value if $variable === false'
);
0 голосов
/ 12 июля 2011

В некотором смысле, да.

Вы не можете разместить его там, где просили (сразу после открытия массива) Вы не можете использовать оператор if. Вы можете использовать троичный (условие)? true: false

<?php

$LibraryStatus = 'true';

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

?>
0 голосов
/ 12 июля 2011

Вы могли бы использовать толчок?

<?php

$LibraryStatus='true'

$arrLayout = array();
if ($LibraryStatus=='true') {
push($arrLayout["section1"], array(
        "wLibrary" => array(
            "title" => "XBMC Library",
            "display" => ""
        ));
}
?>
0 голосов
/ 12 июля 2011

Вы можете сделать:

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

$LibraryStatus= true ;
if ($LibraryStatus=== true) {
     $arrLayout["section1"]["wlibrary"] =  array("title" => "XBMC Library","display" => "" );
}
0 голосов
/ 12 июля 2011

Нет, вы не можете иметь блок if-else в середине объявления массива. Вы можете, однако, манипулировать массивом различными способами для достижения желаемого результата. См. функции массива .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...