$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)
太感謝版主了!