Change the form of an array (PHP) -
i have huge, complicated issue in php app. here details:
i have array (var dumped):
array (size=6) 0 => string '11/04/15' (length=8) 1 => string '15/04/15' (length=8) 2 => string '19/04/15' (length=8) 3 => string '1' (length=1) 4 => string '1' (length=1) 5 => string '3' (length=1)
but want displayed as:
array (size=6) array(size=2) string '11/04/15' (length=8) string '1' (length=1) array(size=2) string '15/04/15' (length=8) string '1' (length=1) array(size=2) string '19/04/15' (length=8) string '3' (length=1)
as can see add sub arrays, reorder structure , remove keys. starter array values change there more dates/less dates , numbers. linked, key 0 should bulked key 3 , key 1 bulked key 4 etc. think that's enough information.
ps: i'm trying arrange data chart php's bar graph (http://www.chartphp.com/).
this should work you:
since pretty obvious i'm going assume, pattern behind expected results should combine numbers dates sorted asc.
so here first dates array preg_grep()
. numbers getting array_diff()
original array , dates array.
then sort both arrays asc , $dates
array sort usort()
compare timestampes strtotime()
, $numbers
array sort sort()
.
at end loop through both arrays array_map()
create expected result.
<?php $arr = [ "19/04/15", "11/04/15", "15/04/15", "3", "1", "1", ]; $dates = preg_grep("/\d{2}\/\d{2}\/\d{2}/", $arr); $numbers = array_diff($arr, $dates); sort($numbers); usort($dates, function($a, $b){ if(strtotime($a) == strtotime($b)) return 0; return strtotime($a) < strtotime($b) ? 1 : -1; }); $result = array_map(function($v1, $v2){ return [$v1, $v2]; }, $dates, $numbers); print_r($result); ?>
output:
array ( [0] => array ( [0] => 11/04/15 [1] => 1 ) [1] => array ( [0] => 15/04/15 [1] => 1 ) [2] => array ( [0] => 19/04/15 [1] => 3 ) )
Comments
Post a Comment