从JSON中排序特定对象

At the moment I'm trying PHP and JSON and I have problems with processing multidimensional arrays, like this one:

{"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":[]},

]}

What I would like to have is:

{"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"}]}   

]}

So only the objects that have the kl object with id 240, should be displayed.

Thanks for the help.

There is error in your JSON and it giving error while converting JSON to Php array

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

and final code will be

<?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);
?>

output

{"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"}]}]}