Привет, ребята, я понятия не имею, возможно ли это или если есть другой способ сделать это, но любая помощь будет оценена по достоинству. То, что я пытаюсь сделать, это отключить массивы в отдельности. Так что у меня это ..
<?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" => "" ) ) ) ?>
Если его false, то он также будет пустым, очевидно. Возможно ли иметь if, если внутри массива, управляющего другим массивом? Если да, то как это сработает? Это всего лишь часть массива, есть больше вариантов и разделов. Я просто взял их для простоты, так как их легко масштабировать, как только я понимаю, как это сделать один раз.
благодаря
Да, это возможно, используя определенную стенографию:
<?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';
Если вы используете эту стенографию, она всегда будет возвращать результат, поэтому вы можете поместить ее между скобками и поместить ее между массивом.
Но для этой точной ситуации есть и другие решения.
Внутри массива вы можете использовать тернарный оператор:
$a = array( 'b' => $expression == true ? 'myWord' : ''; );
Но в вашем примере лучше всего переместить if-statement за пределы вашего массива.
Вы бесполезно усложняете вещи.
Если условие и значения, которые вы хотите назначить, достаточно просты, вы можете использовать тернарный оператор ( ?:
🙂 Следующим образом:
$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" => "" ) ); }
То, что вы предлагаете, невозможно. Вам нужно будет добавить базу переменных в условии if / else после того, как вы сделаете массив.
Например:
$arrLayout = array(); if($LibraryStatus) { $arrLayout['section1'] = array("wLibrary" => array( "title" => "XBMC Library", "display" => "" )); }
Это все еще довольно неопрятно из-за вашей структуры массива, я бы попытался устранить некоторые ключи, если вы можете, например, вам нужен section1
? Вы можете просто позволить PHP добавить числовой ключ, выполнив $arrLayout[] = array(..)
, которые создают новую «строку» в массиве, которую вы все еще можете пропустить.
Нет, вы не можете иметь блок if-else
в середине объявления массива. Вы можете, однако, манипулировать массивом по-разному, чтобы достичь желаемого результата. См. Функции массива .
Ты можешь сделать:
$emptyArray = array(); $arrLayout = array("section1" => $emptyArray); $LibraryStatus= true ; if ($LibraryStatus=== true) { $arrLayout["section1"]["wlibrary"] = array("title" => "XBMC Library","display" => "" ); }
Вы можете использовать push?
<?php $LibraryStatus='true' $arrLayout = array(); if ($LibraryStatus=='true') { push($arrLayout["section1"], array( "wLibrary" => array( "title" => "XBMC Library", "display" => "" )); } ?>
В некотором смысле, да.
Вы не можете поместить его там, где вы просили (сразу после открытия массива). Вы не можете использовать оператор if. Вы можете использовать тройной (условие)? true: false
<?php $LibraryStatus = 'true'; $array = array( "section1" => ($LibraryStatus == 'true') ? array("wLibrary" => array("title" => "Title","display" => "")) : array() ); ?>
Другой способ – включить логику в функцию или через файл include.
С функцией:
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" => "" ) ); } ?>
Обнаружена эта проблема при настройке режима отладки PDO , который зависит от настроек конфигурации.
Примеры выше были большими, но немного неоднозначными, поэтому я решил написать еще один простой пример того, как это сделать:
array( 'key' => $variable ? 'Sets certain value if $variable === true' : 'Sets certain value if $variable === false' );