这样的数组该怎么遍历才是最好的呢?请各位指教一下!

power0811 2005-09-11 07:33:02
Array
(
[servicesinfo] => Array
(
[service] => Array
(
[key] => Array
(
[rand] => Array
(
[0] => Array
(
[aim] => Array
(
[0] => Array
(
[file] => Array
(
[content] => 第一次
[o_value] =>
)

[name] => 老师
[o_value] =>
)

[1] => Array
(
[file] => Array
(
[content] => 第二次的
[o_value] =>
)

[name] => 学生
[o_value] =>
)

)

[value] => n
[o_value] =>
)

[1] => Array
(
[aim] => Array
(
[0] => Array
(
[file] => Array
(
[content] => 第三次
[o_value] =>
)

[name] => 学校
[o_value] =>
)

[1] => Array
(
[file] => Array
(
[content] => 第四次
[o_value] =>
)

[name] => 校长
[o_value] =>
)

)

[value] => y
[o_value] =>
)

)

[number] => 00
[o_value] =>
)

[service_id] => 123
[o_value] =>
)

[o_value] =>
)

)
以上是我解析xml的一个结果,我现在想把"老师"."学校","校长","学生"和每一个[content]的内容取出来.该怎么做呢?请各位朋友知道我一下.有什么方法可以取出来呢??
...全文
248 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zairwolfo 2005-09-13
  • 打赏
  • 举报
回复
倒叙打印?什么意思?用结果举例。

可以。你想解析成什么格式?
power0811 2005-09-13
  • 打赏
  • 举报
回复
还有一个问题.我怎么把[service],[key]等.这些名字解析出来呢??
power0811 2005-09-13
  • 打赏
  • 举报
回复
我刚刚试了一下.为什么还是老样子呢??
power0811 2005-09-13
  • 打赏
  • 举报
回复
麻烦您了,我举一个简单的例子:
<?
$tArr = array("key" => array("liu","de","hua","level"=>array("zhang","xue","you","file"=>"cai","yi","lin")));
print_r($tArr);
?>
打印结果如下:
Array ( [key] => Array ( [0] => liu [1] => de [2] => hua [level] => Array ( [0] => zhang [1] => xue [2] => you [file] => cai [3] => yi [4] => lins ) )

我怎样才能知道liudehua是属于[key]的,zhangxueyou是属于[level]的,caiyilin是属于file的,如果用您的方法都装到一个数组中去的话,那么我是没有办法区分的,而且象这些[key],[level]都是不一定的.也学在他们下面还有[level_1][file_1]等.您看这样子的话.怎么装在到内存中去呢?而且在我从内存中输出数据的时候.能判断出各个值是属于哪个[key]或者[level] 的呢?
麻烦您帮我想一下.多谢
xuzuning 2005-09-13
  • 打赏
  • 举报
回复
当然可以! 以zairwolfo(君子兰)的代码为例
function findcontent($arr){
global $newarr;
foreach($arr as $con) {
if(is_array($con)) findcontent($con);
else $newarr[]=$con;
}
}
其中
if(is_array($con)) findcontent($con);//递归
else $newarr[]=$con;//保存,也可在此显示
是深度优先的,因为递归调用在前。他一直要到达“叶”才返回,所以出现你遇到的问题
改成广度优先的就可以了
if(! is_array($con)) $newarr[]=$con;//保存,也可在此显示
else findcontent($con);//递归
zairwolfo 2005-09-13
  • 打赏
  • 举报
回复
你打印出现在的显示结果先。不提供一个完整的已实现了的数组的简要结构和你要实现的实例,别人麻烦帮你写。

唠叨的话我也没看明白。不过你可以尝试对新数组编辑,比如ksort之类的函数。惭愧没找到倒转数组的具体函数。
power0811 2005-09-13
  • 打赏
  • 举报
回复
能教教我嘛?多谢:)
power0811 2005-09-13
  • 打赏
  • 举报
回复
这个广度优先的话该怎么做呢?因为它遇到的第一个一定是数组.肯定会走到else下面啊.然后不断的递归啊
power0811 2005-09-13
  • 打赏
  • 举报
回复
我想解析成
service_id=123
key=00
rand=y
aim=学校
content=物理专业
service_id=124
key=01
rand=n
aim=学校
content=计算机专业
......
象这样解析出来的话.我想用嵌套的循环来解析.可是数组嵌套的太多了.
而且这样作的话.我装载写xml的时候也是一个很麻烦的事情.该怎么办呢?
多谢.
bflovesnow 2005-09-12
  • 打赏
  • 举报
回复
2楼上:一样.
power0811 2005-09-12
  • 打赏
  • 举报
回复
谢谢两位高手.可是我想把这个数组按照顺序打印出来改怎么做呢?现在我打印出来的是从最里层往外这样倒叙打印出来的.能否顺序呢??
zairwolfo 2005-09-11
  • 打赏
  • 举报
回复
楼上,&$tArray这种方法和global $tArray的效果应该一样吧?
thunderx 2005-09-11
  • 打赏
  • 举报
回复
改了一下函数,保留键值方便处理!
function getContent($pArray,&$tArray=NULL){
foreach($pArray as $k=>$v){
if(is_array($v)) {
getContent($v,&$tArray);
}else {
$tArray[][$k] = $v;
}
}
}
thunderx 2005-09-11
  • 打赏
  • 举报
回复
$arr = 你的数组
$tArr = array();
function getContent($pArray,&$tArray=NULL){
foreach($pArray as $k=>$v){
if(is_array($v)) {
getContent($v,&$tArray);
}else if($k=="content"||$k=="name"){
$tArray[] = $v;
}
}
}

getContent($arr,&$tArr);
echo "<pre>";
print_r($tArr);
echo "</pre>";
thunderx 2005-09-11
  • 打赏
  • 举报
回复
麻烦把数组原型打出来!
zairwolfo 2005-09-11
  • 打赏
  • 举报
回复
$arr[][][][][][]这样一直找下去。或者重新构造数组,选取值!is_array的,即为你的内容。

function findcontent($arr){
global $newarr;
foreach($arr as $con) {
if(is_array($con)) findcontent($con);
else $newarr[]=$con;
}
}

21,891

社区成员

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

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