2012-09-05 97 views
0

我想知道是否有可能在變量變量數組引用中獲取x值位置(即2nd)。我可以通過數字索引訪問關聯數組嗎?

下面的代碼適用於第一個數組,但不適用於第二個。

THX藝術

// WORKS FINE // 
$my1stArray= array('red', 'green', 'blue'); 
$var_1st = 'my1stArray'; 

// for each lopp of var var works fine 
echo " - my1stArray Values - <br>"; 
foreach ($$var_1st as $k => $v){ 
echo $k." : ".$v." <br>"; 
} 
// direct access also works 
echo "my1stArray 3rd value: ".${$var_1st}[2]."<br>"; 

// Not so good! // 
$my2ndArray = array(
    'color' => '#ff0000', 
    'face' => 'helvetica', 
    'size' => '+5', 
); 
$var_2nd = 'my2ndArray'; 

// for each lopp of var_2nd works fine 
echo "<br> - my2ndArray Values - <br>"; 
foreach ($$var_2nd as $k => $v){ 
echo $k." : ".$v." <br>"; 
} 
/** try to access 2nd value in array with position **/ 
echo "my2ndArray 2rd value: ".${$var_2nd[1]}[0]."<br>"; 
echo "my2ndArray 2rd value: ".${$var_2nd}[1][0]."<br>"; 
+0

'foreach($$ var_2nd as $ k => $ v){echo $ k。「:」。$ v。「
」; }'的作品,對吧?這個問題的答案在於它的輸出... – bfavaretto

+0

@bfavaretto是的我可以做一個自己的foreach,我只是想知道是否有一個直接的方法,而不是一個foreach循環。 thx藝術 –

+0

不,如果你有一個關聯數組,你不能按位置訪問它(除非你在循環中計數,並在計數到達期望位置時中斷)。 – bfavaretto

回答

1

好了,我說「不,你不能」,但實際上有一種方法。這裏是一個例子(沒有變量):

$my2ndArray = array(
    'color' => '#ff0000', 
    'face' => 'helvetica', 
    'size' => '+5', 
); 
$keys = array_keys($my2ndArray); 
echo "my2ndArray 2nd value: " . $my2ndArray[$keys[1]] . "<br>"; 

看起來不太好,但應該工作。不是說,如果您對數組進行排序,關鍵指標將會改變。

另一種方法是使用計數器和循環,正如我在評論中提到的那樣。但是,這將是更醜陋的......

+0

thx爲更新@bfavaretto,只需要編輯'my2ndArray [$ keys [1]]'缺少$。 &+1因爲我不在乎我的內臟不美麗! thx藝術 –

+0

@artvanderlay好的,添加了缺少的'$'。很高興幫助! – bfavaretto

1

在你的代碼你的最後一個例子是不是出於同樣的原因,下面的代碼無法正常工作的工作:

$a = array('akey'=>'a','bkey'=>'b'); 
echo $a[0]; 

究其原因,關鍵是設置爲字符串並且必須如此訪問。要解決我的例子,我需要將其更改爲:

$a = array('akey'=>'a','bkey'=>'b'); 
echo $a['akey']; 

要解決您的例子中,你需要改變你的最後迴音,以便它引用的關鍵作爲一個字符串:

echo "my2ndArray 2rd value: ".${$var_2nd}['color']."<br>"; 
+0

thx @brett,我已經通過鍵[]'ref'工作,但輸入密鑰是未知的,只有數組中的順序。我正在尋找一種更好的方式來按位置引用按鍵,如果該按鍵被設置爲字符串。目前我需要將鍵添加到數組中,獲取第二個值,然後在主數組中搜索值['color']? thx藝術 –

+0

如果你不關心只有位置的鑰匙。您可以使用[array_values](http://php.net/array_values)將鍵替換爲數字位置。 – Brett

相關問題