多维数组循环读取问题

php600 2012-09-25 08:48:41
多维数组
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除了安全问题,效率是不是挺差的?
...全文
197 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
php600 2012-09-29
  • 打赏
  • 举报
回复
哦,那就是没办法了,还以为会有其他方法、。。。。
StAlan 2012-09-29
  • 打赏
  • 举报
回复
递归跟循环的思想就完全不同。而最朴素的递归实现

function back()
{
back();
}

这种利用自带堆栈实现的递归效率在php里效率是相当低的。如果自己维护一个递归堆栈的话效率还是可以接受的
xuzuning 2012-09-29
  • 打赏
  • 举报
回复
递归并没有你说的那么可怕
但是递归也是一种循环
StAlan 2012-09-29
  • 打赏
  • 举报
回复
你如果想要不用foreach,如果不考虑效率问题可以自己写个函数递归取值,不过递归函数在php里效率低的可怕
php600 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

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

[Quote=引用 8 楼 的回复:]

递归并没有你说的那么可怕
但是递归也是一种循环
[/Quote]

嗯,递归就不考虑了,还是用循环的了,感谢参与..........
xuzuning 2012-09-27
  • 打赏
  • 举报
回复
既然 绝对不能用eval
还要 不要遍历
那么你打算如何识别被 “.” 分隔的这些键值呢?
php600 2012-09-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

PHP code
$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('n……
[/Quote]
和一楼的一样。。。。。。。。。。。。
www_7di_net 2012-09-26
  • 打赏
  • 举报
回复
$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);
php600 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

PHP code
$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')
)
……
[/Quote]


和我目前的解决方法是一样的,还有其他办法吗?$s不foreach这样
xuzuning 2012-09-25
  • 打赏
  • 举报
回复
$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
)

由此可以看出,多掌握几门“外语”的重要性

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧