Ссылочный ключ из того же массива

Я пытаюсь сослаться на пару ключ/значение элемента в том же массиве:

$glossary_args = array(
    'name'          => 'Glossary Terms',
    'singular_name' => 'Glossary Term',
    'add_new'       => 'Add New Term',
    'edit_item'     => 'Edit Term',
    'search_items'  => 'Search'.$glossary_args["name"],
)

Это вообще возможно? Если да, то как?


person Greg Wiley    schedule 29.08.2012    source источник
comment
Дублирование stackoverflow.com/questions/10358261/php-self-referenceing- массив   -  person ernie    schedule 29.08.2012
comment
Возможно, но я думаю, что это немного более конкретно. В дополнение к этому, я хотел бы услышать мнения о том, как лучше всего это сделать, если это невозможно.   -  person Greg Wiley    schedule 30.08.2012


Ответы (2)


Вы можете использовать тот факт, что присваивание само по себе является выражением в PHP:

$glossary_args = array(
    'name'          => ($name = 'Glossary Terms'),
    'singular_name' => 'Glossary Term',
    'add_new'       => 'Add New Term',
    'edit_item'     => 'Edit Term',
    'search_items'  => 'Search'.$name
)
person Eric    schedule 29.08.2012
comment
Вау, я надеялся, что смогу сделать что-то вроде: functionName($arr = [ 'message' => 'hello', 'something_else' => $arr['message'] ]); или functionName([ 'message' => 'hello', 'something_else' => $self['message'] ]);, но ваш работает! - person kiradotee; 09.06.2016
comment
Ваше PHP-кунг-фу сильно. - person pbarney; 14.09.2017

Вы не можете сделать это, когда впервые определяете массив — пока вы находитесь внутри array(), $glossary_args еще не создан. Попробуй это:

$glossary_args = array(
  'name' => 'Glossary Terms',
  'singular_name' => 'Glossary Term',
  'add_new' => 'Add New Term',
  'edit_item' => 'Edit Term'
);
// first we create the rest of $glossary_args, then we set search_items
$glossary_args['search_items'] = 'Search '.$glossary_args["name"];
person Abraham    schedule 29.08.2012
comment
Ok. Я думаю, что я сделаю то же самое, что я сделал с поиском для add_new и edit_item. Идея состоит в том, что мне нужно будет отредактировать только имя и имя в единственном числе, и это изменит остальную часть массива. Вы бы порекомендовали array_push в этот момент? - person Greg Wiley; 30.08.2012
comment
array_push не может устанавливать ключи массива, только значения. Вам нужно будет установить add_new и edit_item так же, как search_items. - person Abraham; 30.08.2012
comment
было бы чище использовать ссылки. . . посмотри мой ответ - person ernie; 30.08.2012