多维数组
array(
   'a'=>array(
     'a2'=>array('dd','ff','gg'),
     'a3'=>array('dd','ff','gg')
   ),
   'b'=>array(
     'b2'=>array('22','55','88'),
     'b3'=>array(
        'cs'=>array('nn','mm','xx')
     )
   )
)字符串
a.a2
b.b2
b.b3.cs如何根据这个字符串读取相应的数组?比如
a.a2 = ['a']['a2']  结果是  array('dd','ff','gg')
b.b2 = ['b']['b2']  结果是  array('22','55','88')
b.b3.cs = ['b']['b3']['cs']  结果是  array('nn','mm','xx')
注:数组深度不限,最好不要遍历,绝对不能用eval顺便问一下eval除了安全问题,效率是不是挺差的?

解决方案 »

  1.   

    $ar = array(
      'a'=>array(
      'a2'=>array('dd','ff','gg'),
      'a3'=>array('dd','ff','gg')
      ),
      'b'=>array(
      'b2'=>array('22','55','88'),
      'b3'=>array(
      'cs'=>array('nn','mm','xx')
      )
      )
    );
    $s = 'b.b3.cs';
    $p =& $ar;
    foreach(explode('.', $s) as $k) {
      if(isset($p[$k])) $p = $p[$k];
    }
    print_r($p);Array
    (
        [0] => nn
        [1] => mm
        [2] => xx
    )由此可以看出,多掌握几门“外语”的重要性
      

  2.   

    和我目前的解决方法是一样的,还有其他办法吗?$s不foreach这样
      

  3.   

    $ar = array(
      'a'=>array(
     'a2'=>array('dd','ff','gg'),
      'a3'=>array('dd','ff','gg')
      ),
      'b'=>array(
     'b2'=>array('22','55','88'),
     'b3'=>array(
     'cs'=>array('nn','mm','xx')
      )
      )
    );
    $s = 'b.b3.cs';
    $s = explode('.', $s);
    $p =& $ar;
    For($i=0;$i<count($s);$i++) {
      if(isset($ar[$s[$i]])) $ar = $ar[$s[$i]];
    }
    print_r($ar);
      

  4.   

    既然 绝对不能用eval
    还要 不要遍历
    那么你打算如何识别被 “.” 分隔的这些键值呢?
      

  5.   

    你如果想要不用foreach,如果不考虑效率问题可以自己写个函数递归取值,不过递归函数在php里效率低的可怕
      

  6.   

    递归跟循环的思想就完全不同。而最朴素的递归实现function back()
    {
        back();
    }这种利用自带堆栈实现的递归效率在php里效率是相当低的。如果自己维护一个递归堆栈的话效率还是可以接受的