Тернар в ассоциативных массивах в PHP

Как мне сделать что-то подобное с ассоциативными массивами в PHP.

array(
    'title' => 'HelloWorld',
    if $user == admin:
      'access callback' => 'callbackHello',
      'access arguments' => array('arg1', 'arg2'),
    if $user != admin:
      'access callback' => 'callbackWorld',
      'access arguments' => array('arg1', 'arg2'),
  );

Значит ли это, что вам нужен псевдоответ?

RiggsFolly 10.12.2018 19:54
'access callback' => $user == admin ? 'callbackHello' : 'callbackWorld',?
Alon Eitan 10.12.2018 19:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
104
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Разбейте его на части.

$arr =array(
    'title' => 'HelloWorld');
if ($user == "admin"){
     $arr[] = ['access callback' => 'callbackHello',
      'access arguments' => array('arg1', 'arg2')];
}else{
     $arr[] = ['access callback' => 'callbackWorld',
      'access arguments' => array('arg1', 'arg2')];
}


Метод многомерного массива.
Используйте array_merge, чтобы объединить массив с предыдущим $ arr.

$arr =array(
    'title' => 'HelloWorld');
if ($user == "admin"){
     $arr = array_merge($arr,['access callback' => 'callbackHello',
      'access arguments' => array('arg1', 'arg2')]);
}else{
     $arr = array_merge($arr,['access callback' => 'callbackWorld',
      'access arguments' => array('arg1', 'arg2')]);
}

Я не использовал DV, но я думаю, это потому, что вы создаете многомерный массив

Alon Eitan 10.12.2018 20:01

OP не указал, каким должен быть результат. Но конечно. Я тоже дам многомерный ответ.

Andreas 10.12.2018 20:02

Не надо. Поместите логику за пределы объявления массива.

$arr = ['title' => 'foo'];
if ( $user == 'admin' ) {
  $arr['callback'] = 'myCallback1';
  $arr['args'] = [1, 2]
} else {
  $arr['callback'] = 'myCallback2';
  $arr['args'] = [3, 4]
}

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

Ответ принят как подходящий

Используя тернарные операторы, вы могли бы сделать

$arr =array(
    'title' => 'HelloWorld',
    'access callback' => $user == 'admin' ? 'callbackHello' : 'callbackWorld',
    'access arguments' => $user == 'admin' ? array('arg1', 'arg2') : array('arg3', 'arg4')
);

Другие вопросы по теме