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' => '北京',
),
。
。
。
) 展开
'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' => '北京',
),
。
。
。
) 展开
3个回答
展开全部
<?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] => 北京
)
)
$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] => 北京
)
)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
$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' => 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;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
测试过,完全符合你的要求。正确无误
<?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>";
?>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询