PHP: Использование имени переменной не работает с массивами? - PullRequest
0 голосов
/ 01 ноября 2010

Я пытаюсь выяснить, почему это работает:

$joe = "hey joe";
$something = "joe";
print_r(${$something});

Но это не так:

$joe["where_you_going"] = "hey joe";
$something = "joe[where_you_going]";
print_r(${$something});

Почему это? Есть ли способ сделать то, что я пытался во втором примере?

Ответы [ 3 ]

2 голосов
/ 01 ноября 2010

Переменные - это особая функция в PHP, которая разрешает ваш первый пример: http://php.net/manual/en/language.variables.variable.php. Это не eval, поэтому во втором примере это не работает.

Во втором примере joe [where_you_going] есть имя массива, оператор скобок и имя индекса. Вы не можете объединить просто объединить все три, так как они требуют операций (индексация в массив), а не просто именование. Вы могли бы сделать:

$joe["where_you_going"] = "hey joe";
$something = "joe";
$something_else = "where_you_going";
print_r(${$something}[$something_else]);
1 голос
/ 01 ноября 2010

Нет, вы не можете так делать.

Идея PHP о "переменных переменных", как правило, лучше всего делать в виде массивов.

0 голосов
/ 01 ноября 2010

Синтаксис переменной не позволяет этого.
Имеет ли смысл в вашем случае сделать вместо этого одну из этих вещей?

Использовать переменную в качестве индекса массива:

$joe["where_you_going"] = "hey joe";
$something = "where_you_going";
print_r($joe[$something]);


Используйте переменную в качестве имени массива, а другую - в качестве индекса:

$joe["where_you_going"] = "hey joe";
$something1 = "joe";
$something2 = "where_you_going";
print_r(${$something1}[$something2]);


Используйте eval для оценки всего выражения:

$joe["where_you_going"] = "hey joe";
$something = '$joe["where_you_going"]';
print_r(eval("return {$something};"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...