2012-06-28 105 views
0

標題可能有點混淆。這是我的問題:使用數組值與索引作爲變量變量

我知道你可以在另一個變量中保存一個變量名,然後讀取第一個變量的內容。這就是我的意思:

$variable = "hello" 
$variableholder = 'variable' 
echo $$variableholder; 

這將打印:「你好」。現在,我有一個問題是:

$somearray = array("name"=>"hello"); 
$variableholder = "somearray['name']"; //or $variableholder = 'somearray[\'name\']'; 
echo $$variableholder; 

這給了我一個PHP錯誤(它說的someArray $ [「名」]是不確定的變量)。你能告訴我這是否可能,我做錯了什麼;或者如果這顯然不可能,那麼你能否給我另一個解決方案來做類似的事情?

在此先感謝。

+0

您在這裏混合變量名和數組訪問。可能重複[使用字符串來訪問(可能很大)的多維數組](http://stackoverflow.com/questions/7003559/use-strings-to-access-potentially-large-multidimensional-arrays) – hakre

回答

1

就目前而言,我只能想到這樣的事情:

<?php 
    // literal are simple 
    $literal = "Hello"; 
    $vv = "literal"; 
    echo $$vv . "\n"; 
    // prints "Hello" 


    // for containers it's not so simple anymore 
    $container = array("Hello" => "World"); 
    $vv = "container"; 

    $reniatnoc = $$vv; 
    echo $reniatnoc["Hello"] . "\n"; 
    // prints "World" 
?> 

這裏的問題是,(從php: access array value on the fly引用):

PHP語言的語法只允許標變量表達式結尾處的符號和非一般表達式,這是它在大多數其他語言中的工作原理。

將PHP允許標符號的任何地方,一個可以寫這種更緻密

echo $$vv["Hello"] 

附註:我想用variable variablesisn't that sane在生產中使用。

+0

非常感謝回答。不幸的是,它不適用於我目前的問題(我應該在我的問題中談論它,但我希望這個問題更通用)。我所擁有的是:$ variableholder =($ id!= FALSE)?'container [\''。$ id。'\']':'container';我需要這種方式,因爲如果$ id是FALSE,那麼容器只是和數組(如果不是聯合數組)。不知道我說得夠清楚。 – fedejp

+0

我明白了。免責聲明:我不是PHP專業人員。但我從來沒有見過[變量變量](http://php.net/manual/language.variables.variable.php),直到今天(我已經使用PHP開關7年)。我的第一印象是:哇,這可能與PHP?正如我所懷疑的,這種語言功能使它成爲[代碼氣味列表](http://stackoverflow.com/questions/4273244/auditing-a-php-codebase) - 所以就像一個sidenode,也許你不應該依賴完全在這樣的結構上(至少在生產環境中)。 – miku

+0

再次感謝。是的,我選擇了一個IF語句並重復代碼,區別在於如果$ id爲FALSE,那麼該變量沒有索引;如果不是,它已經。我只是想讓它更優雅。非常感謝您的建議。 – fedejp

1

這個怎麼樣? (注意:變量變量和goto一樣差)

$variablename = 'array'; 
$key = 'index'; 

echo $$variablename[$key]; 
+0

你測試過了嗎?這不起作用。 – miku

+0

啊,好點。您需要首先將$ variablename指定給$ foobar。但是無論如何這個對話不應該存在,變量變量是非常糟糕的做法:/ – Lusitanian