2016-11-20 10 views
3

datetimeisApprovedのフィールドを持つレコードがたくさんあるjsonファイルがあります。私がしようとしているのは、承認されたすべてのレコードに対してdatesのjson rrayを作成することです。そして、日付は現在の日付のために予約されているすべての時間を持っています。PHPでjsonから多次元配列を作成

ので、この...から:

[{"fullName":"Jojn Petkobsky","userName":"user1","phone":"12415455","email":"[email protected]"date":"11\/16\/2016","time":"1pm ","reason":"ReaReasonReaeason","isApproved":0,"label":"warning","status":"Approved"},{"fullName":"Zoltan Heinkelman","userName":"user2","phone":"12415455","email":"[email protected]"date":"11\/16\/2016","time":"2pm ","reason":"ReaReasonReaeason","isApproved":1,"label":"warning","status":"Approved"}{"fullName":"Jojn Petkobsky","userName":"user1","phone":"12415455","email":"[email protected]"date":"11\/16\/2016","time":"1pm ","reason":"ReaReasonReaeason","isApproved":1,"label":"warning","status":"Approved"},{"fullName":"Frank Heinkelman","userName":"user3","phone":"12415455","email":"[email protected]"date":"10\/11\/2016","time":"2pm ","reason":"ReaReasonReaeason","isApproved":1,"label":"warning","status":"Approved"}] 

...私はこのような何かを持つことができるので、私は特定の日付のためにすべての予約時間を持つことができます。

{"12/11/16" 
    {"time" :"10am"}, 
    {"time" :"1pm"}, 
    {"time" :"5pm"} 
] 
"12/10/16" 
    {"time" :"9am"} 
] 
} 

私はこのような何かをしようとしたが、実際にそれを終えることができませんでした:

$string = file_get_contents("appointments.json"); 
$json_a = json_decode($string, true); 
$date; 
$datesTimes = array(); 
foreach($json_a as $json_r){ 
    if ($json_r['isApproved']==1) { 
     $date = $json_r['date']; 
     //another foreach? 
    } 
} 

任意の助けが理解されるであろう!

+2

あなたのJSONが無効として表示されます。有効なJSONをお持ちですか? – Kitson88

答えて

4

コメントに記載されているとおり、JSONはではありませんが有効なので、私はそれをどのように行うことができるかを示すために修正しました。 JSONとして

//Fixed JSON as much as I could to show in example. 

$json = ' 

[ 

    { 
     "fullName": "Jojn Petkobsky", 
     "userName": "user1", 
     "phone": "12415455", 
     "email": "[email protected]", 
     "date": "11\/16\/2016", 
     "time": "1 pm", 
     "reason": "ReaReasonReaeason", 
     "isApproved": "0", 
     "label": "warning", 
     "status": "Approved" 
    }, 

    { 
     "fullName": "Kitson88", 
     "userName": "user2", 
     "phone": "122323325", 
     "email": "[email protected]", 
     "date": "11\/16\/2016", 
     "time": "12 pm", 
     "reason": "ReaReasonReaeason", 
     "isApproved": "0", 
     "label": "warning", 
     "status": "Approved" 
    }, 
{ 
     "fullName": "Jamie", 
     "userName": "user2", 
     "phone": "122323325", 
     "email": "[email protected]", 
     "date": "12\/16\/2016", 
     "time": "8 pm", 
     "reason": "ReaReasonReaeason", 
     "isApproved": "0", 
     "label": "warning", 
     "status": "Approved" 
    } 



] 

'; 


$array = json_decode($json, true); 

//This will be you rnew Array for holding the needed data. 
$approved = []; 

foreach ($array as $value) { 

    if ($value['status'] === 'Approved') { //Any check really which will validate Approved 

     if (array_key_exists($value['date'], $approved)) { //Check if key exists note** will only work on 1D Array 

      array_push($approved[$value['date']], $value['time']); //If so, then append 

     } else { //If not, then create it and add value 

      $approved += [$value['date'] => [$value['time']]]; 

     } 
    } 
} 


//Encode back to JSON 
$newJson = json_encode($approved); 

出力

{ 
    "11\/16\/2016": ["1 pm", "12 pm"], 
    "12\/16\/2016": ["8 pm"] 
} 

http://php.net/manual/en/function.array-key-exists.php

http://php.net/manual/en/function.array-push.php