Обратные переменные переменные? - PullRequest
1 голос
/ 24 июня 2010

Я использую массив для хранения имен других массивов, которые динамически генерируются в других местах. Мне нужно перебрать массив «names» и получить доступ к содержимому «именованных» массивов. Примерно так:

$names = array("one", "two", "three");
$one = array("a", "b", "c");
$two = array("c", "d", "e");
$three = array("f", "g", "h");
foreach ($process_array in $names) {
    // how to access the contents of $one, $two and $three using only $names??
}

Я предпочитаю быть уверенным, что должен каким-то образом использовать переменные переменные, но все примеры, которые я прочитал, показывают логическую обратную сторону того, что я пытаюсь сделать (если я не неправильно понимаю основные принципы - полностью возможно!)

Большое спасибо за любые советы.

Ответы [ 4 ]

3 голосов
/ 24 июня 2010
$names = array("one", "two", "three");
$one = array("a", "b", "c");
$two = array("c", "d", "e");
$three = array("f", "g", "h");
foreach ($names as $name) {
// how to access the contents of $one, $two and $three using only $names??
print_r(${$name});
}
2 голосов
/ 24 июня 2010

PHP имеет функцию под названием переменные переменные :

foreach ($names as $name) {
    $$name;
}

Только для переменных вы можете использовать приведенный выше синтаксис ($$name). Если вы хотите использовать выражение для именования переменных, используйте синтаксис в скобках, например ${"foo".$name}.

1 голос
/ 24 июня 2010

Как это?

foreach ($names as $name) {
    var_dump($$name); // do something else
}
0 голосов
/ 24 июня 2010
$names = array("one", "two", "three");
$one = array("a", "b", "c");
$two = array("c", "d", "e");
$three = array("f", "g", "h");

foreach ($names as $name) {
  foreach ($$name as $value) {
    // $value contains the array values.
  }
}

Чтобы заметить, это foreach ($array as $value), а не foreach ($value in $array).

...