2016-11-20 71 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