好吧,我正在使用一个大型多维数组,其中包含的信息比我需要的多,我想循环遍历它以过滤我感兴趣的数据。遗憾的是,这个多维数组是动态生成的,并不总是包含我想要的数据,所以我必须使用如下逻辑:
if(isset($ar['b']['ba']['baa'])){
echo '<h3>'.$ar['b']['ba']['baa'].'</h3>';
}
if(isset($ar['b']['ba']['baba'])){
echo '<h3>'.$ar['b']['ba']['baba'].'</h3>';
}
if(isset($ar['b']['ba']['babb'])){
echo '<h3>'.$ar['b']['ba']['babb'].'</h3>';
}
上面的效果很好,但看起来有点凌乱,所以我将上面的内容转换为:
$refAr=array();
$refAr[]='b->ba->baa';//3
$refAr[]='b->ba->bab->baba';//4
$refAr[]='b->ba->bab->babb';//5
上面看起来更加漂亮和整洁,并且是我想要控制脚本的方式,以防我将来需要引用不同的键。我遇到的问题是尝试使用上述格式来实际引用数组。我认为变量变量会起作用,但显然它失败了。我使用 eval 的第二次尝试有效,但我对我的解决方案不太满意。这就是我需要你们进来的地方,有没有更好的方法来做到这一点?下面是我的尝试:
<?php
$ar=array(
'a'=>array('aa'=>1,'ab'=>2),
'b'=>array(
'ba'=>array('baa'=>3,'bab'=>array('baba'=>4,'babb'=>5),'bac'=>array('baca'=>6,'bacb'=>7)),
)
);
$refAr=array();
$refAr[]='b->ba->baa';//3
$refAr[]='b->ba->bab->baba';//4
$refAr[]='b->ba->bab->babb';//5
foreach($refAr as $ref)
{
$r=explode('->',$ref);
$r="\$ar['".implode("']['",$r)."']";
echo '<h1>'.$r.'</h1>';
echo '<h3>'.$$r.'</h3>';//undefined
eval('$t='.$r.';');
echo "<h3>$t</h3>";//works but uses eval, is there a better way?
}