Intereting Posts
Добавить метод в std-объект в php Использовать ключевое слово в функциях – PHP Вычитайте дату и время с текущей даты и времени, чтобы найти возраст в PHP Скопировать массив PHP в массив javascript Настройка NEO4j в Symfony2 Обнаружение программного обеспечения AdBlocking? Использование YUI Compressor в файлах JavaScript, содержащих PHP Кто-нибудь знает, как преобразовать двоичные данные, хранящиеся в базе данных, обратно в изображение? Ошибка построения: фатальная ошибка: pcre.h: нет такого файла или каталога Ошибка сайта: доступ к php-проекту Является ли память, выделенная PHP одним запросом, всегда выпущенным в конце? Laravel 5.1 + PHPunit – API-тест возвращает всегда неверную ошибку аргумента foreach Маршрут Laravel 4 с неограниченным количеством параметров Как установить список доверенных сертификатов для клиента сокета в PHP? Отказывание / прерывание операций FTP в PHPUnit

Условный элемент внутри массива (…)

Моя система отправляет массив конфигурации в такую ​​функцию:

callThatFunction( array(k1 => v1, k2 => v2, ... kn=vn)); 

Я хочу сделать одну из ключевых пар значений, обусловленную некоторыми обстоятельствами.

Могу ли я сделать это, не создавая переменную для массива (и это нарушает чистый синтаксис конфигурации, который создал кто-то другой)?

Как это

 callThatFunction ( array( k1 => v1, if($cond( {k2 => v2,} ... kn=vn)); 

Вышеупомянутое, очевидно, неверно синтаксически, но должно выразить мою идею.

спасибо

Вы можете использовать условный оператор cond ? true-expr : false-expr cond ? true-expr : false-expr :

 $someConfig = array( 'k1' => 'v1', 'k2' => $cond ? 'v2a' : 'v2b' ); 

Условное выражение $cond ? 'v2a' : 'v2b' $cond ? 'v2a' : 'v2b' даст 'v2a' если $cond оценивает значение true и 'v2b' противном случае. Но это работает только со значением ключа.

Если вы хотите только добавить ключ на основе условия, вам нужно использовать отдельный, if :

 $someConfig = array('k1' => 'v1'); if ($cond) { $someConfig['k2'] = 'v2'; } 

Редактировать Вы можете добавлять ключи условно без переменной, используя оператор объединения массива или array_merge :

 array('k1' => 'v1') + ($cond ? array('k2' => 'v2') : array()) array_merge(array('k1' => 'v1'), $cond ? array('k2' => 'v2') : array()) 

Теперь вам нужно решить, что более читаемо или лучше поддерживать.

Поместите его после объявления массива:

 $someConfig = array( ... ); if($cond){ $someConfig['k2'] = $v2; } 

В конце концов я придумал следующее:

callThatFunction (массив (k1 => v1, k2 => v2, … kn = vn) + ($ cond? array (ключ => значение): array () ))

Будет по-прежнему ценить предложение о том, что будет более прямо выражать намерение

Вы можете назначать все значения и фильтровать пустые ключи из массива одновременно:

 $myArray = array_filter([ 'k1' => 'v1', 'k2' => $cond ? 'v2' : false ]); 

Это позволяет избежать условности после факта, и это довольно читаемо.

Я думаю, что все эти ответы до сих пор оставят какой-либо след в массиве, когда условие не будет выполнено.

Я предлагаю установить массив в полном объеме, а затем использовать функцию unset для удаления тех, которые вы не хотите. Это даст чистый массив только с тем, что вы хотите, а также легко читается.

Так…

 $shapes = array('one'=>'circle, 'three'=>'triangle, 'four'=>'square', 'five'=>'pentagon') if($i_like_curves==false){ unset($shapes['one']); } эта $shapes = array('one'=>'circle, 'three'=>'triangle, 'four'=>'square', 'five'=>'pentagon') if($i_like_curves==false){ unset($shapes['one']); } не $shapes = array('one'=>'circle, 'three'=>'triangle, 'four'=>'square', 'five'=>'pentagon') if($i_like_curves==false){ unset($shapes['one']); }