i want to make which one is “live” at “status” case inside json begin from first.
“finish” second
“soon” 3th. and “false” is last in foreach php.
i use some code from “real_time” but now i want from “status” case. could you please help me.
Here is my json file
JavaScript
x
"matches": [
{
"time": "23:00",
"real_time": "2020-10-28 23:00:00",
"status": false,
"country": "URU",
"countryname": "Uruguay",
"flag": "uy",
},
{
"time": "14:30",
"real_time": "2020-10-28 14:30:00",
"status": "live",
"country": "HUN",
"countryname": "Macaristan",
"flag": "hu",
},
{
"time": "04:00",
"real_time": "2020-10-28 04:00:00",
"status": "live",
"country": "COL",
"countryname": "Kolombiya",
"flag": "co",
},
{
"time": "05:00",
"real_time": "2020-10-28 05:00:00",
"status": "finish",
"country": "CRC",
"countryname": "Kosta Rika",
"flag": "cr",
},
{
"time": "00:00",
"real_time": "2020-10-29 00:00:00",
"status": "soon",
"country": "CRC",
"countryname": "Kosta Rika",
"flag": "cr",
},
{
"time": "17:30",
"real_time": "2020-10-28 17:30:00",
"status": "soon",
"country": "KUW",
"countryname": "Kuveyt",
"flag": "kw",
}
]
Advertisement
Answer
You can use the usort
function for comparing the orders but the boolean needs to be converted in the comparison first. As for your criteria I have converted only for false value in the function.
JavaScript
$data = json_decode( $json , true );
$orders = [ 'live', 'finish', 'soon', 'false' ];
$orders = array_flip( $orders );
usort( $data['matches'], function ( $data1, $data2 ) use ($orders)
{
$compare1 = is_bool( $data1['status'] ) ? var_export( $data1['status'], true) : $data1['status'];
$compare2 = is_bool( $data2['status'] ) ? var_export( $data2['status'], true) : $data2['status'];
return $orders [ $compare1 ] <=> $orders [ $compare2 ] ;
});
var_dump($data);