2016-11-20 74 views
3

我有一个json文件,其中有大量的记录,字段为date,timeisApproved。我正在尝试做的是创建一个json rray,对所有批准的记录都有dates。并且日期具有为当前日期预订的所有小时。从php创建一个多维数组php

从这个...

所以:

[{"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是不是有效,所以我已经将它修正为一个点来说明如何完成它。

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

输出作为JSON

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