从JSON中排序特定对象

时间:2017-01-16 18:18:34

标签: php json

目前我正在尝试使用PHP和JSON,我在处理多维数组时遇到了问题,如下所示:

{"jsonrpc":"2.0","id":"1","result":[

{"type":"subst","lsid":11544,"lstype":"bs","date":20170116,"startTime":840,"endTime":900,"kl":[],"te":[{"id":205,"orgid":162}],"su":[],"ro":[{"id":121,"name":"HOF 3(2)"}]},

{"type":"subst","lsid":11550,"lstype":"bs","date":20170116,"startTime":840,"endTime":900,"kl":[],"te":[{"id":0,"orgid":172}],"su":[],"ro":[{"id":147,"name":"KAMP Turm"}]},

{"type":"subst","lsid":11554,"lstype":"bs","date":20170116,"startTime":745,"endTime":755,"kl":[],"te":[{"id":145,"orgid":179}],"su":[],"ro":[{"id":110,"name":"HS -A"}]},

{"type":"subst","lsid":11565,"lstype":"bs","date":20170116,"startTime":1030,"endTime":1050,"kl":[],"te":[{"id":142,"orgid":196}],"su":[],"ro":[{"id":110,"name":"HS -A"}]},

{"type":"subst","lsid":11576,"lstype":"bs","date":20170116,"startTime":1030,"endTime":1050,"kl":[],"te":[{"id":185,"orgid":268}],"su":[],"ro":[{"id":117,"name":"HOF 1"}]},

{"type":"subst","lsid":11581,"lstype":"bs","date":20170116,"startTime":1030,"endTime":1050,"kl":[],"te":[{"id":291,"orgid":292}],"su":[],"ro":[{"id":120,"name":"HOF 3(1)"}]},

{"type":"cancel","lsid":11860,"date":20170116,"startTime":1220,"endTime":1315,"kl":[],"te":[{"id":186}],"su":[],"ro":[]},

{"type":"subst","lsid":11040,"date":20170116,"startTime":1400,"endTime":1445,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]},

{"type":"subst","lsid":11040,"date":20170116,"startTime":1450,"endTime":1535,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]},

{"type":"add","lsid":12051,"date":20170116,"startTime":1315,"endTime":1620,"txt":"FK DaZ","kl":[],"te":[{"id":155},{"id":193},{"id":195},{"id":205},{"id":206},{"id":299}],"su":[],"ro":[]},

]}

我想要的是:

{"jsonrpc":"2.0","id":"1","result":[
    {"type":"subst","lsid":11040,"date":20170116,"startTime":1400,"endTime":1445,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]},
    {"type":"subst","lsid":11040,"date":20170116,"startTime":1450,"endTime":1535,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]}   

]}

因此,只应显示具有kl对象id 240的对象。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的JSON中存在错误,并且在将JSON转换为Php数组时出错(

{"type":"add","lsid":12051,"date":20170116,......},
                                                  ^ remove semicolon

,最终代码为

<?php
$arr = '{"jsonrpc":"2.0","id":"1","result":[{"type":"subst","lsid":11544,"lstype":"bs","date":20170116,"startTime":840,"endTime":900,"kl":[],"te":[{"id":205,"orgid":162}],"su":[],"ro":[{"id":121,"name":"HOF 3(2)"}]},{"type":"subst","lsid":11550,"lstype":"bs","date":20170116,"startTime":840,"endTime":900,"kl":[],"te":[{"id":0,"orgid":172}],"su":[],"ro":[{"id":147,"name":"KAMP Turm"}]},{"type":"subst","lsid":11554,"lstype":"bs","date":20170116,"startTime":745,"endTime":755,"kl":[],"te":[{"id":145,"orgid":179}],"su":[],"ro":[{"id":110,"name":"HS -A"}]},{"type":"subst","lsid":11565,"lstype":"bs","date":20170116,"startTime":1030,"endTime":1050,"kl":[],"te":[{"id":142,"orgid":196}],"su":[],"ro":[{"id":110,"name":"HS -A"}]},{"type":"subst","lsid":11576,"lstype":"bs","date":20170116,"startTime":1030,"endTime":1050,"kl":[],"te":[{"id":185,"orgid":268}],"su":[],"ro":[{"id":117,"name":"HOF 1"}]},{"type":"subst","lsid":11581,"lstype":"bs","date":20170116,"startTime":1030,"endTime":1050,"kl":[],"te":[{"id":291,"orgid":292}],"su":[],"ro":[{"id":120,"name":"HOF 3(1)"}]},{"type":"cancel","lsid":11860,"date":20170116,"startTime":1220,"endTime":1315,"kl":[],"te":[{"id":186}],"su":[],"ro":[]},{"type":"subst","lsid":11040,"date":20170116,"startTime":1400,"endTime":1445,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]},{"type":"subst","lsid":11040,"date":20170116,"startTime":1450,"endTime":1535,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]},{"type":"add","lsid":12051,"date":20170116,"startTime":1315,"endTime":1620,"txt":"FK DaZ","kl":[],"te":[{"id":155},{"id":193},{"id":195},{"id":205},{"id":206},{"id":299}],"su":[],"ro":[]}]}';

//convert json tp php array
$arr = json_decode($arr, true);
$i = 0;
foreach($arr['result'] as $itr){
    if(count($itr['kl']) == 1){
        if($itr['kl'][0]['id'] != 240){
            //remove index which doesn't contain kl with id 240
            unset($arr['result'][$i]);
        }
    } else {
        //remove index which doesn't contain kl with id
        unset($arr['result'][$i]);
    }
    $i = $i+1;
}
//re index array from the beginning
$arr['result'] = array_values($arr['result']);
echo json_encode($arr);
?>

输出

{"jsonrpc":"2.0","id":"1","result":[{"type":"subst","lsid":11040,"date":20170116,"startTime":1400,"endTime":1445,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]},{"type":"subst","lsid":11040,"date":20170116,"startTime":1450,"endTime":1535,"txt":"EVA","kl":[{"id":240,"name":"12"}],"te":[{"id":0,"orgid":172}],"su":[{"id":38,"name":"CH G1"}],"ro":[{"id":140,"name":"WCH1"}]}]}