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' => '北京',
),
)
)

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



)

第1个回答  2013-10-31
<?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] => 北京
)

)
第2个回答  推荐于2017-09-29
$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;

本回答被提问者采纳
第3个回答  2013-10-31
测试过,完全符合你的要求。正确无误
<?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>";
?>

PHP 多维固定数组转换成二维数组
is_array($ar)){ $list [$k][$key] = $ar; }else{return dofor_child ($ar,$list,$k); }}} return $list;}$arr=dofor_child($array1,$list,-1);var_dump($arr);exit;

php 多个一维数组合并成一个二维数组
给数组加上变量,然后遍历一下 foreach ($Arr1 as $k => $r) { Arr4[] = array($Arr1[$k],$Arr2[$k],$Arr3[$k]);} echo '';print_r($Arr4);

php 如何把多个一维数组合并成二维数组
你可以这样操作,新建一个数组,然后用array_push()函数,依次把2个一维数据进行压栈处理。然后就成了一个二维数组了。

php怎么把一个十个元素的数组,分成每两个元素一组的二维数组
input_array = array('a', 'b', 'c', 'd', 'e','f','g','h');dump(array_chunk($input_array, 2));输出结果 然后直接取值就行了

php 将一维数组转换成二维数组怎么办?
'1969-12-30' => 20,'1969-12-29' => 5, \\x0d\\x0a'1969-12-28' => 6, '1969-12-27' => 30, '1969-12-26' => 70, \\x0d\\x0a'1969-12-25'=> 33);\\x0d\\x0a\/\/转换成这样的二维数组:Array ( [0] => Array ( [day] => 1969-12-31 [sum] => 10 ) [1...

PHP循环二维数组,将两个二维数组转换成一个二维数组
推荐使用函数:array_push()将后一个数组压入第一个数组未尾;array_merge合并数组。不会的话看帮助手册。函数满足不了需求再使用循环。

php递归出来的一维数组,怎么合并成一个新的二维数组
我觉得你在得到这个一维数组时就可以做到。下面我默认成你的一维数组key为分类id。<?php data = '你的一维数组';\/\/这里懒得打 foreach($data as $key=>$vo){ if($vo['pid'] != 0){ unset($data[$key]);data[$vo['pid']]['list'][] = $vo;} } print_r($data);?> ...

三个一维数组合并成一个二维数组(PHP)
Arr4 = array();foreach ($Arr1 as $k => $r) { Arr4[] = array($Arr1[$k],$Arr2[$k];$Arr3[$k]);} print_r($Arr4);\/\/如果仅仅是数字索引的话,也可以用for循环来完成的。

php怎样数据库行循环生成二维数组并替换其中的值再生成新的二维数组
貌似在while里面用不到foreach,,smarty引擎我没用过,按理说它的赋值 应该也不用while一个一个赋值,把$smarty->assign('art_recommend_row',$new_result);这个赋值拿到循环外面(smarty没用过,按照thinkphp yii2 这些框架来说 赋值给模板不需要放在循环里面),我按照我的想法把你的改了一下 ...

php一维数组变二维数组
php $a = array('a0'=>'0001','b0'=>'2','a1'=>'0003','b1'=>'6');$array = change($a,1);print_r($array);function change($array,$num){ $b = array(); for($i=0;$i<=$num;$i++){ $array = array(); $array['id'] = empty($a['a'.$i]) ?

相似回答