2017-03-27 14 views
0

私はphpに熟練しておらず、mysqlデータベースを介してプロキシリクエストにのみ使用しています。私はこれについて高くて低く見えましたが、私が意図しているように私のjson配列をどのように入れ子にするのか分かりません。私のDBでMysqliからPHPへJSON

PHP

if ($result = mysqli_query($con, $sql)) 
{ 

    $resultArray = array(); 
    $tempArray = array(); 

    while ($row = mysqli_fetch_assoc($result)) 
    { 

    array_push($resultArray, $row); 
    }  

    echo json_encode($resultArray); 

} 

私はお互いに関連付けることができます「ブロック」のマッピングを持っています。 PA_250x500_block、PA_250x500_TBlock & PA_250x500_StraightBlock。すべてのブロックをルートまたはブランチに指定できます。代わりに、この出力の

JSON出力

[ 
    { 
     "root_class_name":"PA_250x500_block", 
     "branch_class_name":"PA_250x500_Tblock" 
    }, 
    { 
     "root_class_name":"PA_250x500_block", 
     "branch_class_name":"PA_250x500_StraightBlock" 
    }, 
    { 
     "root_class_name":"PA_250x500_StraightBlock", 
     "branch_class_name":"PA_250x500_block" 
    }, 
    { 
     "root_class_name":"PA_250x500_StraightBlock", 
     "branch_class_name":"PA_250x500_Tblock" 
    }, 
    { 
     "root_class_name":"PA_250x500_Tblock", 
     "branch_class_name":"PA_250x500_StraightBlock" 
    }, 
    { 
     "root_class_name":"PA_250x500_Tblock", 
     "branch_class_name":"PA_250x500_block" 
    } 
] 

は、私はそれが互換性のあるマッチの配列ではなく、すべての可能な組み合わせとして、よりきれいに入れ子に取得しようとしている:

[ 
    { 
     "root_class_name":"PA_250x500_Tblock", 
     "branch_class_name":[ 
     "PA_250x500_StraightBlock", 
     "PA_250x500_block" 
     ] 
    }, 
    { 
     "root_class_name":"PA_250x500_Straightblock", 
     "branch_class_name":[ 
     "PA_250x500_block", 
     "PA_250x500_TBlock" 
     ] 
    }, 
    { 
     "root_class_name":"PA_250x500_block", 
     "branch_class_name":[ 
     "PA_250x500_StraightBlock", 
     "PA_250x500_TBlock" 
     ] 
    } 
] 

誰もが持っています1から1のオブジェクトではなく、1からNのリストとしてbranch_class_nameをネストした配列にする方法のアイデアはありますか?

おかげで、

+0

SQLクエリはどのように見えますか? ( '$ sql')データベースの内容とスキーマはどうなっていますか? – Timo

+0

MySQLはネストされたデータを返しません。データを自分自身でフォーマットする必要があります – Ibu

答えて

0

あなたは、ご使用のアレイのプッシュを修正し、あなたの配列は数があるので、それは非常にあなたの出力ではありません

array_push($resultArray, $row); 

$resultArray[$row['root_class_name']]['branch_class_name'][] = $row['branch_class_name']; 

へ変更する必要があるように見えますが、 foreachは、その配列をあなたが望むものにリセットすることができます。

+0

または '$ resultArray = array_values($ resultArray);'を再インデックス化してください。 – AbraCadaver

+0

Posterは 'reindex'を探していません。ポスターは一致する行を一緒にマージしようとしています。 – Forbs

+0

私はコメントしていますが、単純なforeachはあなたが望むものにその配列をリセットできることを知っています._ – AbraCadaver