Filtering an array with condition in PHP -
i trying filter array output children on holidays within date range (i.e 14-11-2016 till 18-11-2016) in php.
i following data in array , not have control on creation of data.
[{"holiday":"15-11-2016","name":"josh stevens"},{"holiday":"17-11-2016","name":"josh stevens"},{"holiday":"22-11-2016","name":"josh stevens"},{"holiday":"14-11-2016","name":"naomi christ"},{"holiday":"15-11-2016","name":"naomi christ"},{"holiday":"16-11-2016","name":"naomi christ"},{"holiday":"17-11-2016","name":"naomi christ"},{"holiday":"14-11-2016","name":"jasmine auger"},{"holiday":"15-11-2016","name":"jasmine auger"},{"holiday":"16-11-2016","name":"jasmine auger"},{"holiday":"17-11-2016","name":"jasmine auger"}]
i need output data ones "holiday" >= 14-11-2016 , <= 18-11-2016.
i have tried following logic not return anything
function filterarray($value) { return ($value > '14-11-2016'); } $filteredarray = array_filter($fullarray, 'filterarray'); foreach($filteredarray $k => $v) { echo "$k = $v"; }
if sure 'holiday' field contains correct data, can use code:
$fullarray = json_decode( '[{"holiday":"15-11-2016","name":"josh stevens"},{"holiday":"17-11-2016","name":"josh stevens"},{"holiday":"22-11-2016","name":"josh stevens"},{"holiday":"14-11-2016","name":"naomi christ"},{"holiday":"15-11-2016","name":"naomi christ"},{"holiday":"16-11-2016","name":"naomi christ"},{"holiday":"17-11-2016","name":"naomi christ"},{"holiday":"14-11-2016","name":"jasmine auger"},{"holiday":"15-11-2016","name":"jasmine auger"},{"holiday":"16-11-2016","name":"jasmine auger"},{"holiday":"17-11-2016","name":"jasmine auger"}]', true ); //i need output data ones "holiday" >= 14-11-2016 , <= 18-11-2016. function filterarray($value) { static $from = 20161114; static $until = 20161118; // parse date , convert int. $v = new \datetime( $value['holiday'] ); $v = (int)$v->format('ymd'); // compare integer return ($v >= $from && $v <= $until ); } $filteredarray = array_filter($fullarray, 'filterarray'); foreach($filteredarray $k => $v) { var_dump($v); // prints sub-array }
you can compare datetime objects:
//i need output data ones "holiday" >= 14-11-2016 , <= 18-11-2016. $from = new \datetime('2016-11-14'); $until = new \datetime('2016-11-18'); function filterarray($value) { global $from, $until; $v = new \datetime( $value['holiday'] ); return ($v >= $from && $v <= $until ); }
Comments
Post a Comment