>  Q&A  >  본문

트리 배열을 평면화하고 이를 새로운 배열 형식의 키 => 값에 매핑하는 PHP 메서드

<p>我有一个在php中的复杂数组,像这样:</p> <pre class="brush:php;toolbar:false;">[ 0 => [ 'id' => '2' 'parent_id' => '1' 'text' => 'Algoritma' 'lvl' => '1' 'nodes' => [ 0 => [ 'id' => '11' 'parent_id' => '2' 'text' => 'Flowchart' 'lvl' => '2' 'href' => '/site/read-by-type?id=11' ] 1 => [ 'id' => '12' 'parent_id' => '2' 'text' => 'Pseudo code' 'lvl' => '2' 'href' => '/site/read-by-type?id=12' ] ] 'href' => '/site/read-by-type?id=2' ] 1 => [ 'id' => '3' 'parent_id' => '1' 'text' => 'Pemrograman' 'lvl' => '1' 'nodes' => [ 0 => [ 'id' => '4' 'parent_id' => '3' 'text' => 'Java' 'lvl' => '2' 'href' => '/site/read-by-type?id=4' ] 1 => [ 'id' => '5' 'parent_id' => '3' 'text' => 'PHP' 'lvl' => '2' 'nodes' => [ 0 => [ 'id' => '8' 'parent_id' => '5' 'text' => 'Yii2 Framework' 'lvl' => '3' 'href' => '/site/read-by-type?id=8' ] 1 => [ 'id' => '9' 'parent_id' => '5' 'text' => 'Laravel' 'lvl' => '3' 'href' => '/site/read-by-type?id=9' ] ] 'href' => '/site/read-by-type?id=5' ] 2 => [ 'id' => '7' 'parent_id' => '3' 'text' => 'Javascript' 'lvl' => '2' 'href' => '/site/read-by-type?id=7' ] ] 'href' => '/site/read-by-type?id=3' ] 2 => [ 'id' => '10' 'parent_id' => '1' 'text' => 'Sistem Operasi' 'lvl' => '1' 'nodes' => [ 0 => [ 'id' => '13' 'parent_id' => '10' 'text' => 'Mac OS' 'lvl' => '2' 'href' => '/site/read-by-type?id=13' ] 1 => [ 'id' => '14' 'parent_id' => '10' 'text' => 'Linux' 'lvl' => '2' 'href' => '/site/read-by-type?id=14' ] ] 'href' => '/site/read-by-type?id=10' ] ]</pre> <p>我需要将这些数组展平为键值对的格式,即 ['id' => 'text']:</p> <pre class="brush:php;toolbar:false;">[ 2 => ' Algoritma' // 基于这些级别,有1个空格 11 => ' Flowchart', // 基于这些级别,有2个空格 12 => ' Pseudo code', // 基于这些级别,有2个空格 3 => ' Pemrograman' // 基于这些级别,有1个空格 4 => ' Java' // 基于这些级别,有2个空格 5 => ' PHP' // 基于这些级别,有2个空格 8 => ' Yii2 Framework' // 基于这些级别,有3个空格 9 => ' Laravel' // 基于这些级别,有3个空格 10 => ' Sistem Operasi' // 基于这些级别,有1个空格 ... 以此类推 ]</pre> <p>到目前为止,我写了这样的代码:</p> <pre class="brush:php;toolbar:false;">public static function flattingTree(array $tree){ $denormalizeTree = []; foreach ($tree as $node) { if(isset($node['nodes'])){ // 我被卡住了... } $denormalizeTree[$node['id']] = $node['text']; } return $denormalizeTree; }</pre> <p>但我只得到了一层:</p> <pre class="brush:php;toolbar:false;">[ 2 => 'Algoritma' 3 => 'Pemrograman' 10 => 'Sistem Operasi' ]</pre> <p>非常感谢任何帮助...</p>
P粉563831052P粉563831052435일 전529

모든 응답(2)나는 대답할 것이다

  • P粉043470158

    P粉0434701582023-09-04 14:57:41

    당신은 생각보다 가까이 있습니다. 함수를 재귀적으로 호출하고 결과를 최종 배열에 추가하면 됩니다.

    으아악

    결과:

    으아악

    회신하다
    0
  • P粉807397973

    P粉8073979732023-09-04 13:40:19

    빠른 해결책은 재귀 함수를 사용하여 배열을 반복하고 필요한 데이터를 최종 배열에 추가하는 것입니다.

    핵심은 "확장되지 않은" 배열과 데이터를 보관할 변수(데이터는 해당 변수에 보관됨)를 허용하는 함수를 갖는 것입니다. 마지막 인수는 참조로 전달되어 변수 자체가 데이터를 보유하도록 변경됩니다.

    으아악

    위 함수를 사용하면 이를 호출하고 변수를 지정하여 결과를 저장하는 방식으로 배열을 확장할 수 있습니다.

    으아악

    일을 더 간단하게 만들기 위해 extract 함수를 캡슐화하면 더 이상 결과를 저장하기 위해 빈 배열을 준비할 필요가 없습니다.

    으아악

    이제 배열을 다음과 같이 확장할 수 있습니다.

    으아악

    더 도움이 되었기를 바랍니다.

    회신하다
    0
  • 취소회신하다