2017-03-28 11 views
0

親関係者&子関係を持つ勘定科目表を作成したいとします。 これらのSQLの結果に基づいて:あなたは、私がAUTOID列と相関列をPARENTIDている見ることができるように入れ子構造のsql結果をPHPのjavascriptオブジェクトに変換します

autoid account_code account_name   parentid account_level 
1  100-000   assets     0     1 
2  200-000   liabilities    0     1 
3  110-000   cash     1     2 
4  120-000   bank     1     2 
5  110-001   petty cash    3     3 
6  120-001   bank no 1    4     3 
7  120-002   bank no 2    4     3 
8  210-000   Current liabilities  2     2 
9  210-001   Account Payable   8     3 

。例えば私は、ネストされたオブジェクトにこれらの結果を変換したい:

[{ 
    account_code:'100-000', 
    account_name:'assets', 
    account_level:1, 
    parentid:0, 
    child:[{ 
     account_code:'110-000', 
     account_name:'cash', 
     account_level:2, 
     parentid:1, 
     child:[{ 
      account_code:'110-001', 
      account_name:'petty cash', 
      account_level:3, 
      parentid:3, 
      child:null 
     }] 
    }] 
}, 
{ 
    account_code:'200-000', 
    account_name:'liabilities', 
    account_level:1, 
    parentid:0, 
    child:[{ 
     account_code:'210-000', 
     account_name:'Current Liabilities', 
     account_level:2, 
     parentid:2, 
     child:[{ 
      account_code:'210-001', 
      account_name:'Account Payable', 
      account_level:3, 
      parentid:8, 
      child:null 
     }] 
    }] 
}] 

私はこの

  1. を生成するために念頭に置いてのオプションを持っているPHPの&形式のjsオブジェクトを生成します。
  2. 各レベルごとに3つのjsonを送信し、これらのオブジェクトをlodashと組み合わせます。

これらの要件にはどのソリューションが最適かわかりません。

答えて

0

jstreeライブラリを使用する簡単な方法。

PHP:

function getJsonDataForJstree($dbDataArr) 
{ 
    $arrOfString = array(); 
    foreach($dbDataArr as $row){ 
     $parentId = $row == 0 ? '#' : "custom_elem_$row[parentid]"; 
     $arrOfString[] = '{ "id" : "custom_elem_$row[autoid]", "parent" : $parentId, "text" : "$row[account_name]" }'; 
    } 
    $resJsonData = '['. implode(',', $arrOfString) .']'; 
    return $resJsonData; 
} 
$dbDataArr = getDataFromDataBase(); 
$jsonDataForJstree = getJsonDataForJstree($dbDataArr); 

HTML:

<head> 
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css" /> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script> 
    </head> 
    <body> 
    <input type='hidden' id='jstree-json-data' value='<?php echo $jsonDataForJstree?>' /> 
    <div id='jstree-container'></div> 
    </body> 

Javascriptを/ jQueryの:

var jsTreeData = jQuery('#jstree-json-data').val(); 

$('#jstree-container').jstree({ 'core' : { 
    'data' : jsTreeData 
} }); 
あなたは、次のコードを使用することができます
関連する問題