从现有的组合数组创建像json的树视图

时间:2017-12-11 07:22:08

标签: php arrays json

我有一个组合的数组和它的项目组合成一个数组,但我试图创建json结构,如顺序,然后它的项目列表就像明智。

$combinedarray[]=array('orderid'=>1,'partycode'=>10,"item"=>'abc',"price"=>250); 
$combinedarray[]=array('orderid'=>1,'partycode'=>10,"item"=>'xyz',"price"=>250); 
$combinedarray[]=array('orderid'=>2,'partycode'=>20,"item"=>'pqr',"price"=>250); 
$combinedarray[]=array('orderid'=>2,'partycode'=>20,"item"=>'lmn',"price"=>250); 

输出应该像

[
    "0":[
         {
            "OrderNo": "1",
            "partycode": "10",
            "OrderDetails": [
                {
                    "Item": "abc",
                    "price": 250
                },
                {
                    "Item": "xyz",
                    "price": 250
                }
                ]
          }
        ],
    "1":[
         {
            "OrderNo": "2",
            "partycode": "20", 
            "OrderDetails": [
                {
                    "Item": "pqr",
                    "price": 250
                },
                {
                    "Item": "lmn",
                    "price": 250
                }
                ]
          }
        ]    
]

这就是我所尝试的

$mainarray = array();
            $orderarray = array();
            $orderitemarray = array();
            if (count(combinedarray) > 0) {
                foreach (combinedarray as $obj) {
                    $orderarray[] = array("orderid" => $obj->orderid);
                    $orderitemarray[] = array("Item" => $obj->Item, "price" => $obj->price);
                }


            }
            $mainarray[] = array_unique($orderarray);
            $mainarray['OrderDetails'] = $orderitemarray;
            echo json_encode($mainarray);

2 个答案:

答案 0 :(得分:2)

$mainarray = array();
foreach ($combinedarray as $x) {
    $id = $x['orderid']; 
    unset($x['orderid']);
    if (! isset($mainarray[$id])) {
        $mainarray[$id]['OrderNo'] = $id;
    }
    $mainarray[$id]["OrderDetails"][] = $x;
}
// Now $mainarray has indexes equal to OrderNo. To count it from zero, use array_values
echo json_encode(array_values($mainarray), JSON_PRETTY_PRINT);

demo

答案 1 :(得分:1)

按照给定的数组

$combinedarray[]=array('orderid'=>1,'partycode'=>10,"item"=>'abc',"price"=>250); 
$combinedarray[]=array('orderid'=>1,'partycode'=>10,"item"=>'xyz',"price"=>250); 
$combinedarray[]=array('orderid'=>2,'partycode'=>20,"item"=>'pqr',"price"=>250); 
$combinedarray[]=array('orderid'=>2,'partycode'=>20,"item"=>'lmn',"price"=>250); 

这是我的解决方案

$new  = array();
foreach($combinedarray as $r){
    $new[$r['orderid']]['orderid'] = $r['orderid'];
    $new[$r['orderid']]['partycode'] = $r['partycode'];
    $new[$r['orderid']][] = array("item"=>$r['item'],"price"=>$r['price']);

}
$json = json_encode($new);
echo '<pre>';print_r($new);
echo $json;