數組遍曆問題

來源:互聯網
上載者:User
$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)

太感謝版主了!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.