ホームページ  >  記事  >  バックエンド開発  >  配列トラバーサル関連の問題

配列トラバーサル関連の問題

WBOY
WBOYオリジナル
2016-06-13 12:10:57897ブラウズ

配列トラバーサル問題

$arr=array(<br />	'10'=>array(<br />		'12'=>0<br />	),<br />	'15'=>array(<br />		'30'=>array(<br />			'35'=>0<br />		),<br />		'31'=>array(<br />			'40'=>0<br />		)<br />	)<br />)


上記の配列を使用して、先頭から各ルート ノードへのパスをどのように取得できますか?

たとえば、最終的に次の結果が得られます:
$a[]='10,12';<br />$a[]='15,30,35';<br />$a[]='15,31,40';

------ソリューションのアイデア------------- ---- -----
$arr=array('10'=>array('12'=>0),'15'=>array('30'=>array('35'=>0),'31'=>array('40'=>0)));		<br />		$a=array();<br />		foreach ($arr as $k=>$v){<br />			$a[$k][]=$k;<br />			if(is_array($v)){<br />				foreach ($v as $kk=>$vv){<br />					$a[$k][]=$kk;<br />				}<br />			}		<br />		}<br />		var_dump($a);

-----ソリューションのアイデア------ ----
<br />$arr=array('10'=>array('12'=>0),'15'=>array('30'=>array('35'=>0),'31'=>array('40'=>0),'33'=>array('42'=>0)));		<br />		$a=array();<br />		$i=0;<br />		foreach ($arr as $k=>$v){			<br />			$a[$i][]=$k;<br />			if(is_array($v)){<br />				foreach ($v as $kk=>$vv){<br />					$a[$i][]=$kk;<br />					if(is_array($vv)){<br />						foreach ($vv as $kkk=>$vvv){<br />							$j=0;<br />							if($j==0){<br />								unset($a[$i]);<br />								$a[$i.'-'.$i][]=$k;<br />								$a[$i.'-'.$i][]=$kk;<br />								$a[$i.'-'.$i][]=$kkk;<br />							}else{<br />								$a[$i][]=$kkk;<br />							}<br />						}<br />					}<br />					$i++;<br />				}<br />			}<br />			$i++;<br />		}<br />		var_dump($a);<br />

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

-----ソリューションのアイデア----------------------
$arr=array(<br />  '10'=>array(<br />    '12'=>0<br />  ),<br />  '15'=>array(<br />    '30'=>array(<br />      '35'=>0<br />    ),<br />    '31'=>array(<br />      '40'=>0<br />    )<br />  )<br />);<br /><br />print_r(foo($arr));<br /><br />function foo($ar) {<br />  $res = array();<br />  foreach($ar as $k=>$v) {<br />    if(is_array($v)) {<br />      foreach(foo($v) as $r) $res[] = "$k,$r";<br />    }else $res[] = $k;<br />  }<br />  return $res;<br />}<br />
Array<br />(<br />    [0] => 10,12<br />    [1] => 15,30,35<br />    [2] => 15,31,40<br />)<br /><br />

-----ソリューションのアイデア----------------------
書くメソッド
<br />$arr=array(<br />    '10'=>array(<br />        '12'=>0,<br />        '13'=>array(<br />            '14' => 0,<br />            '16' => array(<br />                '17' =>0<br />            )<br />        )<br />    ),<br />    '15'=>array(<br />        '30'=>array(<br />            '35'=>0<br />        ),<br />        '31'=>array(<br />            '40'=>0<br />        )<br />    )<br />);<br /><br />function foo( $arr, &$str = '' )<br />{<br />    foreach($arr as $key => $value)<br />    {<br />        $str .= "," . $key;<br />        if(is_array($value))<br />        {<br />            foo($value, $str);<br /><br />        }else{<br />            print_r( ltrim($str,',') );<br />            echo '<br>';<br />        }<br />        $str = rtrim( $str, ','.$key);<br />    }<br /><br />}<br /><br />foo($arr);<br />

-----ソリューションのアイデア----------------------

<br />$arr=array(<br />    '10'=>array(<br />        '12'=>0,<br />        '13'=>array(<br />            '14' => 0,<br />            '16' => array(<br />                '17' =>0<br />            )<br />        )<br />    ),<br />    '15'=>array(<br />        '30'=>array(<br />            '35'=>0<br />        ),<br />        '31'=>array(<br />            '40'=>0<br />        )<br />    )<br />);<br /><br />function foo( $arr, &$str = '' )<br />{<br />    foreach($arr as $key => $value)<br />    {<br />        $str .= "," . $key;<br />        if(is_array($value))<br />        {<br />            foo($value, $str);<br /><br />        }else{<br />            print_r( ltrim($str,',') );<br />            echo '<br>';<br />        }<br />        $str = rtrim( $str, ','.$key);<br />    }<br /><br />}<br /><br />foo($arr);<br />

-----ソリューションのアイデア----------------------

<br />$arr=array(<br />    '10'=>array(<br />        '12'=>0,<br />        '13'=>array(<br />            '14' => 0,<br />            '16' => array(<br />                '17' =>0<br />            )<br />        )<br />    ),<br />    '15'=>array(<br />        '30'=>array(<br />            '35'=>0<br />        ),<br />        '31'=>array(<br />            '40'=>0<br />        )<br />    )<br />);<br /><br />function foo( $arr, &$str = '' )<br />{<br />    foreach($arr as $key => $value)<br />    {<br />        $str .= "," . $key;<br />        if(is_array($value))<br />        {<br />            foo($value, $str);<br /><br />        }else{<br />            print_r( ltrim($str,',') );<br />            echo '<br>';<br />        }<br />        $str = rtrim( $str, ','.$key);<br />    }<br /><br />}<br /><br />foo($arr);<br />

-----ソリューションのアイデア----------------------
<br />$arr=array(<br />  '10'=>array(<br />    '12'=>0<br />  ),<br />  '15'=>array(<br />    '30'=>array(<br />      '35'=>0<br />    ),<br />    '31'=>array(<br />      '40'=>0<br />    )<br />  )<br />);<br />function my($arr,$pid=10){<br />    static $item=array();<br />    static $s='';<br />    foreach($arr as $k=>$v){<br />         if(is_array($v)){<br />            foreach($v as $key=>$value){<br />                $s.=$key.',';<br />                if(is_array($value)){<br />                    my($value,$k);<br />                }<br />            }<br />         }else{<br />            $s.=$k;<br />         }<br />         $s=$pid.','.$s;<br />         $item[]=$s;<br />         $s='';<br />    }<br />    return $item;<br />}<br />$arr=my($arr);<br />array_pop($arr);<br />print_r($arr);<br />


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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。