2010-11-02 53 views
3

我想在PHP中建立一個動態變量,儘管在這個問題上已經看到了StackOverflow上的一些問題,我仍然難住...:/如何使用PHP構建動態變量?

變量變量是我的東西從來沒有完全理解 - 希望這裏的某個人能指引我走向正確的方向。 :)

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

Onviously以上不工作,但如果我硬編碼一個變量,例如:

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

...那麼一切都很好,所以很明顯我不能建立我的動態變量正確。有任何想法嗎?

UPDATE:

嗯,確定我應該指出,這些不是在陣列中的鍵 - 我使用被指定爲每個節點的屬性的ID尋址在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> 

希望這有助於更好地解釋事情。 :)

+4

變量變量是邪惡的,應該避免。特別是在你的情況下,即使你在寫作時也無法弄清楚......想象一下,在需要修復一個bug時,弄清楚一年發生了什麼是多麼困難。編寫可讀代碼。寫簡單的代碼... – ircmaxell 2010-11-02 13:12:51

+1

@ircmaxell它可以簡化代碼,甚至使其更具可讀性。例如,想象一個工廠,巨大的開關(創建幾十個類),而不是這段代碼:'factory($ class_name){return new $ class_name()}' – 2010-11-02 13:22:06

+0

@Itay Moav:在這種情況下,您的應用程序將如果添加一個不存在的$ class_name,就會死亡。 – 2010-11-02 13:28:02

回答

6

爲什麼你認爲你需要動態變量?不這只是做你想做的:

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

$$foo = " world"; 

//echo $foo.$$foo; 

echo $foo.$hello; 
+0

這是更正確的解釋:'$ foo =「hello」; $$ foo =「world」; echo $ foo。$ hello;' – pltvs 2010-11-02 13:17:00

+0

@ Alexander.Plutov良好的通話,我更新了我的答案。 – 2010-11-02 13:22:12

+0

輸出'你好'。因爲$ foo有一個空格。) – pltvs 2010-11-02 13:23:15

1

在這個例子中,你不需要動態變量。

如果$孩子[ 「ID」]的值爲0,$孫子[ 「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

1

我看起來像你用好老array鍵混淆variable variables同意。變量變量是一種機制,允許讀取(或寫)的值到一個變量名字是未知的或能改變的,老實說,他們幾乎沒有必要:

<?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中,數組鍵是一個整數或字符串,但它並不需要是文字:你可以從一個變量的關鍵。

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