Как мне построить динамическую переменную с помощью PHP? - PullRequest
3 голосов
/ 02 ноября 2010

Я пытаюсь построить динамическую переменную в PHP, и, несмотря на рассмотрение ряда вопросов по этому вопросу, уже здесь, в StackOverflow, я все еще в тупике ...: /

Переменные - это то, что я никогда не понимал - надеюсь, кто-то здесь может указать мне правильное направление. :)

$data['query']->section[${$child['id']}]->subsection[${$grandchild['id']}]->page[${$greatgrandchild['id']}] = "Fluffy Rabbit";

Очевидно, что вышеприведенное не работает, но если я жестко закодирую переменную как таковую:

$data['query']->section[0]->subsection[3]->page[6] = "Very Fluffy Rabbit";

... тогда все в порядке, поэтому, очевидно, я неправильно строю свою динамическую переменную. Есть идеи?

UPDATE:

Хм, хорошо, я должен был указать, что это не ключи в массиве - я обращаюсь к узлам в XML, используя идентификатор, который указывается в качестве атрибута для каждого узла, поэтому XML имеет следующую структуру:

<subtitles>
<section id="0">
<subsection id="0">
<page id="1">My content that I want to write</page>
<page id="2">My content that I want to write</page>
<page id="3">My content that I want to write</page>
</subsection>
</section>
</subtitles>

Надеюсь, это поможет объяснить вещи немного лучше. :)

Ответы [ 5 ]

6 голосов
/ 02 ноября 2010

Почему вы думаете, что вам нужны динамические переменные здесь? Разве это не делает то, что вы хотите:

$data['query']->section[$child['id']]->subsection[$grandchild['id']]->page[$greatgrandchild['id']] = "Fluffy Rabbit";
1 голос
/ 02 ноября 2010

Похоже, вы путаете переменные со старыми добрыми массивом ключей.Переменные - это механизм, который позволяет считывать (или записывать) значение в переменную, имя которой неизвестно или может измениться, и, честно говоря, они вряд ли когда-либо понадобятся:

<?php

$first_name = 'John';
$last_name = 'Smith';

$display = 'first_name';
echo $$display; // Prints 'John';

$display = 'last_name';
echo $$display; // Prints 'Smith';

Однако ваш код предполагаетчто вы хотите получить доступ только к ключу внутри массива:

<?php

$person = array(
    'first_name' => 'John',
    'last_name' => 'Smith',
);

$display = 'first_name';
echo $person[$display]; // Prints 'John';

$display = 'last_name';
echo $person[$display]; // Prints 'Smith';

В PHP ключ массива представляет собой целое число или строку, но он не обязательно должен быть литералом: вы можете получитьключ от переменной.

1 голос
/ 02 ноября 2010

В этом примере вам не нужны динамические переменные.

Если $ child ["id"] имеет значение 0, $ grandchild ["id"] имеет значение 3, а $ greatgrandchild ["id"] имеет значение 6, вы должны использовать что-то вроде:

$data['query']->section[$child['id']]->subsection[$grandchild['id']]->page[$greatgrandchild['id']] = "Fluffy Rabbit";

Обычно вы используете динамические переменные, как это:

$variable = "variableName";

$$variable = "Some value";

echo $variableName;

Это отобразит:

Some value

EDIT

Полностью согласен с ircmaxell

1 голос
/ 02 ноября 2010
$foo = "hello";

$$foo = " world";

//echo $foo.$$foo;

echo $foo.$hello;
0 голосов
/ 02 ноября 2010
$foo='bobo';
echo $foo;//"bobo"
$$foo='koko';
echo $$foo;//"koko"
echo $bobo;//"koko"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...