2012-09-05 72 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

相关问题