当前位置: 代码迷 >> PHP >> 数组遍历有关问题
  详细解决方案

数组遍历有关问题

热度:52   发布时间:2016-04-28 18:11:20.0
数组遍历问题
$arr=array(
'10'=>array(
'12'=>0
),
'15'=>array(
'30'=>array(
'35'=>0
),
'31'=>array(
'40'=>0
)
)
)


有以上这个数组,怎样才能得到从顶端到每一个根节点的路径?

比如最后得到这样的结果:
$a[]='10,12';
$a[]='15,30,35';
$a[]='15,31,40';

------解决思路----------------------
$arr=array('10'=>array('12'=>0),'15'=>array('30'=>array('35'=>0),'31'=>array('40'=>0)));		
$a=array();
foreach ($arr as $k=>$v){
$a[$k][]=$k;
if(is_array($v)){
foreach ($v as $kk=>$vv){
$a[$k][]=$kk;
}
}
}
var_dump($a);

------解决思路----------------------

$arr=array('10'=>array('12'=>0),'15'=>array('30'=>array('35'=>0),'31'=>array('40'=>0),'33'=>array('42'=>0)));
$a=array();
$i=0;
foreach ($arr as $k=>$v){
$a[$i][]=$k;
if(is_array($v)){
foreach ($v as $kk=>$vv){
$a[$i][]=$kk;
if(is_array($vv)){
foreach ($vv as $kkk=>$vvv){
$j=0;
if($j==0){
unset($a[$i]);
$a[$i.'-'.$i][]=$k;
$a[$i.'-'.$i][]=$kk;
$a[$i.'-'.$i][]=$kkk;
}else{
$a[$i][]=$kkk;
}
}
}
$i++;
}
}
$i++;
}
var_dump($a);

------解决思路----------------------

最后是这样
$arr=array('10'=>array('12'=>0),'15'=>array('30'=>array('35'=>0),'31'=>array('40'=>0),'33'=>array('42'=>0)));
$a=array();
$i=0;
foreach ($arr as $k=>$v){
$a[$i][]=$k;
if(is_array($v)){
foreach ($v as $kk=>$vv){
$a[$i][]=$kk;
if(is_array($vv)){
foreach ($vv as $kkk=>$vvv){
unset($a[$i]);
$a[$i.'-'.$i][]=$k;
$a[$i.'-'.$i][]=$kk;
$a[$i.'-'.$i][]=$kkk;
}
}
$i++;
}
}
}
var_dump(array_values($a));

------解决思路----------------------
$arr=array(
  '10'=>array(
    '12'=>0
  ),
  '15'=>array(
    '30'=>array(
      '35'=>0
    ),
    '31'=>array(
      '40'=>0
    )
  )
);

print_r(foo($arr));

function foo($ar) {
  $res = array();
  foreach($ar as $k=>$v) {
    if(is_array($v)) {
      foreach(foo($v) as $r) $res[] = "$k,$r";
    }else $res[] = $k;
  }
  return $res;
}
Array
(
    [0] => 10,12
    [1] => 15,30,35
    [2] => 15,31,40
)


------解决思路----------------------
写了个方法

$arr=array(
    '10'=>array(
        '12'=>0,
        '13'=>array(
            '14' => 0,
            '16' => array(
                '17' =>0
            )
        )
    ),
    '15'=>array(
        '30'=>array(
            '35'=>0
        ),
        '31'=>array(
            '40'=>0
        )
    )
);

function foo( $arr, &$str = '' )
{
    foreach($arr as $key => $value)
    {
        $str .= "," . $key;
        if(is_array($value))
        {
            foo($value, $str);

        }else{
            print_r( ltrim($str,',') );
            echo '<br>';
        }
        $str = rtrim( $str, ','.$key);
    }

}

foo($arr);

------解决思路----------------------


$arr=array(
    '10'=>array(
        '12'=>0,
        '13'=>array(
            '14' => 0,
            '16' => array(
                '17' =>0
            )
        )
    ),
    '15'=>array(
        '30'=>array(
            '35'=>0
        ),
        '31'=>array(
            '40'=>0
        )
    )
);

function foo( $arr, &$str = '' )
{
    foreach($arr as $key => $value)
    {
        $str .= "," . $key;
        if(is_array($value))
        {
            foo($value, $str);

        }else{
            print_r( ltrim($str,',') );
            echo '<br>';
        }
        $str = rtrim( $str, ','.$key);
    }

}

foo($arr);

------解决思路----------------------


$arr=array(
    '10'=>array(
        '12'=>0,
        '13'=>array(
            '14' => 0,
            '16' => array(
                '17' =>0
            )
        )
    ),
    '15'=>array(
        '30'=>array(
            '35'=>0
        ),
        '31'=>array(
            '40'=>0
        )
    )
);

function foo( $arr, &$str = '' )
{
    foreach($arr as $key => $value)
    {
        $str .= "," . $key;
        if(is_array($value))
        {
            foo($value, $str);

        }else{
            print_r( ltrim($str,',') );
            echo '<br>';
        }
        $str = rtrim( $str, ','.$key);
    }

}

foo($arr);

------解决思路----------------------

$arr=array(
  '10'=>array(
    '12'=>0
  ),
  '15'=>array(
    '30'=>array(
      '35'=>0
    ),
    '31'=>array(
      '40'=>0
    )
  )
);
function my($arr,$pid=10){
    static $item=array();
    static $s='';
    foreach($arr as $k=>$v){
         if(is_array($v)){
            foreach($v as $key=>$value){
                $s.=$key.',';
                if(is_array($value)){
                    my($value,$k);
                }
            }
         }else{
            $s.=$k;
         }
         $s=$pid.','.$s;
         $item[]=$s;
         $s='';
    }
    return $item;
}
$arr=my($arr);
array_pop($arr);
print_r($arr);



Array
(
    [0] => 10,12,
    [1] => 15,30,35
    [2] => 15,31,40
)

  相关解决方案