-1

私は持っています:

$all = array(
    array('id'=>1, 'cat'=>'Main','type'=>'Name0'),
    array('id'=>2, 'cat'=>'Main','type'=>'Name1'),
    array('id'=>3, 'cat'=>'Main','type'=>'Name3'),
    array('id'=>4, 'cat'=>'Main','type'=>'Name4'),
    array('id'=>5, 'cat'=>'Secondary','type'=>'Name5'),
    array('id'=>6, 'cat'=>'Secondary','type'=>'Name6'),
    array('id'=>7, 'cat'=>'Secondary','type'=>'Name7'),
    array('id'=>8, 'cat'=>'Other','type'=>'Name8'),
    array('id'=>9, 'cat'=>'Other','type'=>'Name9'),
    array('id'=>10, 'cat'=>'Other','type'=>'Name10'),
    array('id'=>11, 'cat'=>'Other','type'=>'Name11'),
);

$result = array();
    foreach($all as $array){
    $result[$array['cat']][] = array('id'=>$array['id'],'type'=>$array['type']);
}

$json_type = json_encode($result);

どちらが返されますか:

{"Main":[{"id":"1","type":"name1"},{"id":"2","type":"name2"},{"id":"3","type":"name3"},{"id":"4","type":"name4"}],"Secondary":[{"id":"5","type":"name5"},{"id":"6","type":"name6"},{"id":"7","type":"name7"}],"Other":[{"id":"8","type":"name8"},{"id":"9","type":"name9"},{"id":"10","type":"name10"},{"id":"11","type":"name11"}]}

しかし、私はそれを次のように返す必要があります:

[
{
    "text": "Main",
    "children": [
        {
            "id": "1",
            "text": "name1"
        },
        {
            "id": "2",
            "text": "name2"
        },
        {
            "id": "3",
            "text": "name3"
        },
        {
            "id": "4",
            "text": "name4"
        }
    ]
},
{
    "text": "Secondary",
    "children": [
        {
            "id": "5",
            "text": "name5"
        },
        {
            "id": "6",
            "text": "name6"
        },
        {
            "id": "7",
            "text": "name7"
        }
    ]
},
{
    "text": "Other",
    "children": [
        {
            "id": "8",
            "text": "name8"
        },
        {
            "id": "9",
            "text": "name9"
        },
        {
            "id": "10",
            "text": "name10"
        },
        {
            "id": "11",
            "text": "name11"
        }
    ]
}

]

select2 JQueryプラグインを操作するために、私はを使用しています。'children'の名前は関係ありません。これは単なるプレースホルダーなので、正しく解析されます。どうすればいいのかわからないので、やってみましたstr_replace()が、それでもうまくいきませんでした。

4

1 に答える 1

1

私は2つのループでそれになります。1つ目は結果をカテゴリ別にグループ化し、2つ目はニーズに合わせてフォーマットします。

$temp = array();
foreach($all as $array){    
    if (!isset($temp[$array['cat']])) {
        $temp[$array['cat']] = array();
    }

    $temp[$array['cat']][] = array('id'=>$array['id'], 'type'=>$array['type']);
}

$result = array();
foreach ($temp as $key=>$value) {
    $result[] = array('text'=>$key, 'children'=>$value);
}

echo json_encode($result);

これにより、次の出力が生成されます。

[{"text":"Main","children":[{"id":1,"type":"Name0"},{"id":2,"type":"Name1"},{"id":3,"type":"Name3"},{"id":4,"type":"Name4"}]},{"text":"Secondary","children":[{"id":5,"type":"Name5"},{"id":6,"type":"Name6"},{"id":7,"type":"Name7"}]},{"text":"Other","children":[{"id":8,"type":"Name8"},{"id":9,"type":"Name9"},{"id":10,"type":"Name10"},{"id":11,"type":"Name11"}]}]
于 2012-09-10T14:54:00.873 に答える