php把一个多维数组转化为一个二维数组

$a=array('0'=>array('cid'=>1,'name'=>'中国','child'=>array('0'=>array('cid'=>3,'name'=>... $a = array(
'0' => array(
'cid' => 1,
'name' => '中国',
'child' => array(
'0' => array(
'cid' => 3,
'name' => '安徽',
'child' => array(
'0' => array(
'cid' => 7,
'name' => '黄山',
),
), ),

'1' => array(
'cid' => 4,
'name' => '北京',
),
)
)

);
怎么得到 $b数组
$b=array(
'0' => array(
'cid' => 4,
'name' => '中国',
),
'1' => array(
'cid' => 4,
'name' => '安徽',
),
'2' => array(
'cid' => 4,
'name' => '黄山',
),
'3' => array(
'cid' => 4,
'name' => '北京',
),



)
展开
 我来答
yuyml
2013-10-31 · 超过12用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:23.1万
展开全部
<?php
$a = array(
'0' => array(
'cid' => 1,
'name' => '中国',
'child' => array(
'0' => array(
'cid' => 3,
'name' => '安徽',
'child' => array(
'0' => array(
'cid' => 7,
'name' => '黄山',
),
), ),

'1' => array(
'cid' => 4,
'name' => '北京',
),
)
)

);
$new = array(); //最后形成的
$temp = array(); //临时用的新数据

foreach($a as $key=>$value)
{
if(isset($value['name']))
{
$temp['cid'] = '4';
$temp['name'] = $value['name'];
$new[] = $temp;
}
if(isset($value['child']))
{
if(is_array($value['child']))
{
foreach ($value['child'] as $ky =>$vl)
{
if(isset($vl['name']))
{
$temp['cid'] = '4';
$temp['name'] = $vl['name'];
$new[] = $temp;
}
if(isset($vl['child']))
{
foreach ($vl['child'] as $k => $v)
{
if(isset($v['name']))
{
$temp['cid'] = '4';
$temp['name'] = $v['name'];
$new[] = $temp;
}

}
}
}
}
}
}

print_r($new);

?>

输出结果

Array
(
[0] => Array
(
[cid] => 4
[name] => 中国
)

[1] => Array
(
[cid] => 4
[name] => 安徽
)

[2] => Array
(
[cid] => 4
[name] => 黄山
)

[3] => Array
(
[cid] => 4
[name] => 北京
)

)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wxw魔力鸟
推荐于2017-09-29
知道答主
回答量:30
采纳率:0%
帮助的人:8.2万
展开全部
$a = array(
'0' => array(
'cid' => 1,
'name' => '中国',
'child' => array(
'0' => array(
'cid' => 3,
'name' => '安徽',
'child' => array(
'0' => array(
'cid' => 7,
'name' => '黄山',
),
), ),

'1' => array(
'cid' => 4,
'name' => '北京',
),
)
)

);
function flatArray($arr){
static $newArr = array();
$len = count($arr) ;
if($len > 0){
for($i=0;$i<$len;$i++){
$newArr[] = array('cid'=>$arr[$i]['cid'],'name'=>$arr[$i]['name']);
if(isset($arr[$i]['child'])){
flatArray($arr[$i]['child']);
}
}
}
return $newArr;
}
$a = flatArray($a);
echo '<pre>';
print_r($a);exit;
追问
怎么加一个键值表示该数组的层次   比如 中国 层次0 安徽层次1 黄山层次2
追答

function flatArray($arr,$level){
static $newArr = array();
$len = count($arr) ;
if($len > 0){
for($i=0;$i<$len;$i++){
$newArr[] = array('cid'=>$arr[$i]['cid'],'name'=>$arr[$i]['name'],'level'=>$level);
if(isset($arr[$i]['child'])){
flatArray($arr[$i]['child'],$level+1);
}
}
}
return $newArr;
}
$a = flatArray($a,0);
echo '<pre>';
print_r($a);exit;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0f37e23c0
2013-10-31 · TA获得超过1543个赞
知道大有可为答主
回答量:1070
采纳率:50%
帮助的人:1295万
展开全部
测试过,完全符合你的要求。正确无误
<?php
function getname($arr)
{
global $myarr;
foreach( $arr as $newarr)
{
if ( isset($newarr["name"]) )
$myarr[] = $newarr["name"];
if ( is_array($newarr["child"]) )
getname($newarr["child"]);
}
}

$a = array(//省略 );
$myarr = array();
getname($a);
$b = array();
foreach( $myarr as $v )
{
$b[] = array( 'cid' => 4,'name' => $v );
}
print "<pre>";
print_r($b);
print "</pre>";
?>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式