Как мне сделать что-то подобное с ассоциативными массивами в 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'),
);
'access callback' => $user == admin ? 'callbackHello' : 'callbackWorld',?






Разбейте его на части.
$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, но я думаю, это потому, что вы создаете многомерный массив
OP не указал, каким должен быть результат. Но конечно. Я тоже дам многомерный ответ.
Не надо. Поместите логику за пределы объявления массива.
$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')
);
Значит ли это, что вам нужен псевдоответ?