数组遍历问题
程序员文章站
2022-05-26 08:09:46
...
$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 '
'; } $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 '
'; } $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 '
'; } $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)
太感谢版主了!
推荐阅读
-
js 数组方法 forEach map includes filter some every find findIndex reduce
-
一个代码审计,注入的问题
-
phpstorm中js和php代码混用有错误提示,但是其实没问题,怎么关闭呢?
-
javascript数组(array)的常用方法(shift/unshift/pop/push/concat/splice/reverse/sort/slice/join)
-
新手使用zend studio时如何解决代码提示太弱的有关问题
-
数组中的方法?push(); unshift();pop(); shift();join();concat(); splice(); slice();
-
php 数组除开重复值
-
分别举例说明数组方法push、pop、shift、unshift、join、splice、sort、join、reverse、concat的作用?...
-
取出数组中,前三小的三个单元,非连续索引数组
-
JavaScript中数组中的方法:push()、pop()、shift()、unshift()、slice()、splice()、reverse()、join()、split()、concat()、...