如何使用PHP构建动态变量?

时间:2010-11-02 13:08:33

标签: php variables dynamic

我正在尝试在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";

...然后一切都很好,所以很明显我没有正确构建我的动态变量。有什么想法吗?

更新:

嗯,好吧我应该指出这些不是数组中的键 - 我使用ID指定XML中的节点,该ID被指定为每个节点的属性,因此XML具有以下结构: / p>

<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 个答案:

答案 0 :(得分:6)

为什么你认为这里需要动态变量?这不是你想做的事情吗?

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

答案 1 :(得分:1)

$foo = "hello";

$$foo = " world";

//echo $foo.$$foo;

echo $foo.$hello;

答案 2 :(得分:1)

在此示例中,您不需要动态变量。

如果$ 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

修改

完全同意ircmaxell

答案 3 :(得分:1)

我看起来好像让variable variables混淆了旧的array键。变量变量是一种机制,允许将一个值读取(或写入)一个名称未知或可以更改的变量,老实说,它们几乎不需要:

<?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中,数组键是整数或字符串,但它不需要是文字:您可以从变量中检索键。

答案 4 :(得分:0)

$foo='bobo';
echo $foo;//"bobo"
$$foo='koko';
echo $$foo;//"koko"
echo $bobo;//"koko"