Intereting Posts
Необходимо избегать ввода пользователем из базы данных? Предупреждение: mysql_query (): 3 не является допустимым ресурсом MySQL-Link Получить подстроку строки У меня проблемы с SOAP в PHP Когда использовать подготовленные запросы PDO. Ошибка mysql_real_escape Прозрачное окружное обрезанное изображение с помощью PHP Невозможно получить отношение от одного до многих в Laravel 4 Symfony2 – Twig – Как отправить параметры родительскому шаблону? PHP: отправка огромного количества писем в пакетном режиме Лучший способ справиться с обработкой сессии в Zend Framework Определение типа запроса в PHP (GET, POST, PUT или DELETE) Интеграция Grunt / Gulp и Livereload с существующим сервером Apache, обслуживающим PHP / Zend вызов неопределенного метода DateTime :: add method в php Как отслеживать страну посетителя и перенаправлять их на соответствующие сайты? ОБНОВЛЕНО: mod_rewrite и метод POST в задаче PHP, $ _POST всегда пуст

Использование if-else в массиве

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

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

Если вы используете эту стенографию, она всегда будет возвращать результат, поэтому вы можете поместить ее между скобками и поместить ее между массивом.

http://codepad.org/cxp0M0oL

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

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

 $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' );