Yii2返回JSON格式,数组内有数组

时间:2016-03-25 23:30:40

标签: arrays json yii2

我想在下面获取这些数据,

表关系:

人(一)< ---> (很多)people_info(一个)< ---> (很多)people_contact

采用以下格式,

people: {
    p_id: 10,
    p_price: 3.99,
    people_info : [
        {
            pl_id: 3,
            pl_state: 2,
            pl_district: 6,
            pl_latitude: 6.323434,
            pl_longitude: 108.23499,
            people_contact: [
                {
                    plc_id: 2
                },
                {
                    plc_id: 1
                }
            ]
        },
        {
            pl_id: 2,
            pl_state: 7,
            pl_district: 12,
            pl_latitude: 6.000434,
            pl_longitude: 108.9910003,
            people_contact: [
                {
                    plc_id: 5
                },
                {
                    plc_id: 9
                }
            ]
        }
    ]
}

目前使用这些控制器代码,

    class PeopleController extends Controller
{
public function actionPeople($params){
    Yii::$app->response->format = Response::FORMAT_JSON;

....//some other codes//.....       
        $people= People::find()->select(['p_id', 'p_price'] )->where(['p_id' => $itemId])->one();
        $info= PeopleContact::find()->with(['plPeople'])->asArray([])->all();

     return array(
        'people' => $people,
        'info' => $info,
     );
}

 }

我得到了这些,

"people": {
    "p_id": "3",
    "p_price": "32.42"
}, "locations": [{
    "pl_id": "1",
    "pl_people": "3",
    "pl_title": "",
    "pl_latitude": "6.16438700000000000000",
    "pl_longitude": "102.28314649999993000000",
    "pl_place": null,
    "pl_premise": null,
    "pl_street": "1",
    "pl_area": "1",
    "pl_postcode": "1",
    "pl_district": "1",
    "pl_state": "3",
    "pl_country": 1,
    "place": null,
    "premise": null,
    "street": null,
    "area": null,
    "postcode": null,
    "district": null,
    "state": null,
    "country": "United Kingdom",
    "contacts": [{
        "plc_name": "joe",
        "plc_phone": "123456",
        "plc_email": null
    }]
}]
}

如何以顶部提到的格式实现它?

1 个答案:

答案 0 :(得分:1)

$output;

$people=People::find()->select(['p_id', 'p_price'] )->asArray()->all();
foreach($people as $person) {
    $infos = PersonInfo::find()->where(['person_id' => $person->id])->asArray()->all();
    foreach($infos as $info) {
        $contacts = PersonContact::find()->where(['person_info_id' => $info->id])->asArray()->all();
        foreach($contacts as $contact) {
            $info['contacts'][] = $contact;
        }
        $person['info'][] = $info
    }
    $output['people'][] = $person
}

return $output;

你应该遍历并获取如下数据:people>信息>根据从前一个获取的信息联系每个下一个级别。然后以您想要的格式存储它,如上所示。

这将输出如下内容:

"people": [{
    ...
    "info": [{
        ...
        "contacts": [{
            ...
        },{
            ...
        }]
    }]
},{
    ...
}]