2017-10-27 6 views
0

カテゴリを階層的に印刷しようとしていますが、2番目のレベルのみで成功しています。 。私は彼らが私が私が完全に失われていますここでサブカテゴリの子カテゴリを階層的な順序で印刷する方法

function print_records($records){ 

foreach ($records as $rec){ 

    echo $rec['name']; 
    $get_parent = $rec['parent']; 
    get_sub_cat($get_parent); 
    } 
} 


function get_sub_cat($get_parent){ 

foreach ($get_parent as $rec){ 

    echo $rec['name']; 
    $get_sub = $rec['parent']; 
    get_sub_child_cat($get_parent); 
    } 
} 

をしようとしています

Tasks 
-hard task 
--simple task 

Notes 
-hard note 
--simple note 
---easy note 

記録

$records = array( 
array('id'=>'1', 'parent'=>'0', 'name'=>'Tasks'),  
array('id'=>'2', 'parent'=>'0', 'name'=>'Notes'),  

array('id'=>'3', 'parent'=>'1', 'name'=>'hard task'), 
array('id'=>'4', 'parent'=>'3', 'name'=>'simple task'), 

array('id'=>'5', 'parent'=>'2', 'name'=>'hard note'), 
array('id'=>'6', 'parent'=>'5', 'name'=>'simple note'), 
array('id'=>'7', 'parent'=>'6', 'name'=>'easy note'), 
); 

コードのようなドロップダウンで印刷したいです!再帰を見たことがありますが、この場合の使用方法はわかりません。

答えて

1

必要なものは再帰と呼ばれます。アイデアは、このようなものです:

function printLeafs($node){ 
    echo $node->title; 

    $leafs = getLeafs($node); 
    foreach ($leafs as $leaf){ 
    printLeafs($leaf); 
    } 
} 

おかしい、同じqustionが同時に存在している:PHP Print indefinite categories tree

更新:

作業溶液は、(コマンドラインから実行する)であります:

<?php 

$records = array(
    array('id'=>'1', 'parent'=>'0', 'name'=>'Tasks'), 
    array('id'=>'2', 'parent'=>'0', 'name'=>'Notes'), 

    array('id'=>'3', 'parent'=>'1', 'name'=>'hard task'), 
    array('id'=>'4', 'parent'=>'3', 'name'=>'simple task'), 

    array('id'=>'5', 'parent'=>'2', 'name'=>'hard note'), 
    array('id'=>'6', 'parent'=>'5', 'name'=>'simple note'), 
    array('id'=>'7', 'parent'=>'6', 'name'=>'easy note'), 
); 

printLeafs($records, 0); 

function printLeafs($records, $id, $depth = 0){ 
    if ($id) { 
     $node = getNode($records, $id); 
     echo str_pad('', $depth, '-') . $node['name'] . "\n"; 
    } 

    $leafs = getLeafs($records, $id); 
    foreach ($leafs as $leaf){ 
     printLeafs($records, $leaf['id'], $depth + 1); 
    } 
} 

function getNode($records, $id){ 
    foreach ($records as $rec){ 
     if ($rec['id'] == $id){ 
      return $rec; 
     } 
    } 

    throw new \Exception('id "' . $id . '" not found'); 
} 

function getLeafs($records, $parent_id){ 
    $result = []; 
    foreach ($records as $rec){ 
     if ($rec['parent'] == $parent_id){ 
      $result[] = $rec; 
     } 
    } 

    return $result; 
} 

また、私はオブジェクトを使用することをお勧めします。

+0

ああ、面白いのはコインシデンス – mohsin

+0

あなたはもっと理解を深めるために私の方法でそれをしてください、私は試してきましたが、完璧な解決策は私の一日を作るでしょう – mohsin

+0

@mohsin ok、更新を参照してください –

関連する問題