2017-01-19 16 views
0

Я следующий PHP массив:PHP создать бронирование данные из массива с различными приоритетами и времени диапазонов для каждой даты которым не допускается перекрывать

Array 
(
[20170118] => Array 
    (
     [1420] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTTIME] => 1420 
       [ENDTIME] => 1530 
       [PRIORITY] => superadmin 
       [PRESENTATION] => 46203 
       [TITLE] => Ny+video+test 
      ) 

     [0800] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTTIME] => 0800 
       [ENDTIME] => 1000 
       [PRIORITY] => superadmin 
       [PRESENTATION] => 09341 
       [TITLE] => Linket+pr%C3%A6sentationer+2 
      ) 

     [1200] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTTIME] => 1200 
       [ENDTIME] => 1500 
       [PRIORITY] => high 
       [PRESENTATION] => 28160 
       [TITLE] => Linket+pr%C3%A6sentationer 
      ) 

     [1600] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTTIME] => 1600 
       [ENDTIME] => 1800 
       [PRIORITY] => high 
       [PRESENTATION] => 95042 
       [TITLE] => Pausesk%C3%A6rm 
      ) 

     [0700] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTTIME] => 0700 
       [ENDTIME] => 1130 
       [PRIORITY] => high 
       [PRESENTATION] => 65921 
       [TITLE] => Linket+Linket+pr%C3%A6sentationer+1 
      ) 

     [1100] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTTIME] => 1100 
       [ENDTIME] => 2100 
       [PRIORITY] => normal 
       [PRESENTATION] => 85643 
       [TITLE] => Kalender 
      ) 
    ) 
) 

, что мне нужно сделать с этим массивом, что он должен создать новый массив, содержащий этот элемент, но так, чтобы время начала и окончания не перекрывалось друг с другом (супер-администратор является наивысшим приоритетом, а нормальный - самым низким). - Супер администратор должен ВСЕГДА быть там. - Высокий должен быть на полной длине, если он не перекрывает супер администратора. нормальный должен быть только там, если они не перекрывают другие приоритеты.

Новый массив должен выглядеть следующим образом:

Array 
(
[20170118] => Array 
    (
     [0700] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTIME] => 0700 
       [ENDTIME] => 0800 
       [PRIORITY] => high 
       [PRESENTATION] => 65921 
       [TITLE] => Linket+Linket+pr%C3%A6sentationer+1 
      ) 

     [0800] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTIME] => 0800 
       [ENDTIME] => 1000 
       [PRIORITY] => superadmin 
       [PRESENTATION] => 09341 
       [TITLE] => Linket+pr%C3%A6sentationer+2 
      ) 

     [1000] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTIME] => 1000 
       [ENDTIME] => 1130 
       [PRIORITY] => high 
       [PRESENTATION] => 65921 
       [TITLE] => Linket+Linket+pr%C3%A6sentationer+1 
      ) 

     [1130] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTIME] => 1130 
       [ENDTIME] => 1200 
       [PRIORITY] => normal 
       [PRESENTATION] => 85643 
       [TITLE] => Kalender 
      ) 

     [1200] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTIME] => 1200 
       [ENDTIME] => 1420 
       [PRIORITY] => high 
       [PRESENTATION] => 28160 
       [TITLE] => Linket+pr%C3%A6sentationer 
      ) 

     [1420] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTIME] => 1420 
       [ENDTIME] => 1530 
       [PRIORITY] => superadmin 
       [PRESENTATION] => 46203 
       [TITLE] => Ny+video+test 
      ) 

     [1530] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTIME] => 1530 
       [ENDTIME] => 1600 
       [PRIORITY] => normal 
       [PRESENTATION] => 85643 
       [TITLE] => Kalender 
      ) 

     [1600] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTIME] => 1600 
       [ENDTIME] => 1800 
       [PRIORITY] => high 
       [PRESENTATION] => 95042 
       [TITLE] => Pausesk%C3%A6rm 
      ) 

     [1800] => Array 
      (
       [ENDDATE] => 2017-01-18 
       [STARTIME] => 1800 
       [ENDTIME] => 2100 
       [PRIORITY] => normal 
       [PRESENTATION] => 85643 
       [TITLE] => Kalender 
      ) 
    ) 
) 

ответ

0

Я понял эту часть из себя классы в PHP, я не мог бы быть правильный способ сделать это. но по крайней мере он выводит то, что я хотел, это то, что я сделал:

<?php 
/* 
This JSON encoded away contains the elements wich have been booked for each day, wich start and end time of the day 
priority order is: 
Normal: is the lowest priority 
High: is always more important than normal 
Superadmin: Is the highest priority and should always be shown over the other priorities 
*/ 
$array = '{"20170118":{"superadmin":[{"ENDDATE":"2017-01-18","STARTTIME":"1420","ENDTIME":"1530","PRIORITY":"superadmin","PRESENTATION":"46203","TITLE":"Ny+video+test"},{"ENDDATE":"2017-01-18","STARTTIME":"0800","ENDTIME":"1000","PRIORITY":"superadmin","PRESENTATION":"09341","TITLE":"Linket+pr%C3%A6sentationer+2"}],"high":[{"ENDDATE":"2017-01-18","STARTTIME":"1200","ENDTIME":"1500","PRIORITY":"high","PRESENTATION":"28160","TITLE":"Linket+pr%C3%A6sentationer"},{"ENDDATE":"2017-01-18","STARTTIME":"1600","ENDTIME":"1800","PRIORITY":"high","PRESENTATION":"95042","TITLE":"Pausesk%C3%A6rm"},{"ENDDATE":"2017-01-18","STARTTIME":"0700","ENDTIME":"1130","PRIORITY":"high","PRESENTATION":"65921","TITLE":"Linket+Linket+pr%C3%A6sentationer+1"}],"normal":[{"ENDDATE":"2017-01-18","STARTTIME":"1100","ENDTIME":"2100","PRIORITY":"normal","PRESENTATION":"85643","TITLE":"Kalender"}]},"20170119":{"superadmin":[{"ENDDATE":"2017-01-19","STARTTIME":"0000","ENDTIME":"0629","PRIORITY":"superadmin","PRESENTATION":"46203","TITLE":"Ny+video+test"}],"high":[{"ENDDATE":"2017-01-19","STARTTIME":"0527","ENDTIME":"1427","PRIORITY":"high","PRESENTATION":"85643","TITLE":"Kalender"}],"normal":[{"ENDDATE":"2017-01-20","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170121":{"normal":[{"ENDDATE":"2017-01-22","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170123":{"normal":[{"ENDDATE":"2017-01-24","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170126":{"normal":[{"ENDDATE":"2017-01-27","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170128":{"normal":[{"ENDDATE":"2017-01-29","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170130":{"normal":[{"ENDDATE":"2017-01-31","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170202":{"normal":[{"ENDDATE":"2017-02-03","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170204":{"normal":[{"ENDDATE":"2017-02-05","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170206":{"normal":[{"ENDDATE":"2017-02-07","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170209":{"normal":[{"ENDDATE":"2017-02-10","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170211":{"normal":[{"ENDDATE":"2017-02-12","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170213":{"normal":[{"ENDDATE":"2017-02-14","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170216":{"normal":[{"ENDDATE":"2017-02-17","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170218":{"normal":[{"ENDDATE":"2017-02-19","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170220":{"normal":[{"ENDDATE":"2017-02-21","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170223":{"normal":[{"ENDDATE":"2017-02-24","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170225":{"normal":[{"ENDDATE":"2017-02-26","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170227":{"normal":[{"ENDDATE":"2017-02-28","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170302":{"normal":[{"ENDDATE":"2017-03-03","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170304":{"normal":[{"ENDDATE":"2017-03-05","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170306":{"normal":[{"ENDDATE":"2017-03-07","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170309":{"normal":[{"ENDDATE":"2017-03-10","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170311":{"normal":[{"ENDDATE":"2017-03-12","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170313":{"normal":[{"ENDDATE":"2017-03-14","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170316":{"normal":[{"ENDDATE":"2017-03-17","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170318":{"normal":[{"ENDDATE":"2017-03-19","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170320":{"normal":[{"ENDDATE":"2017-03-21","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170323":{"normal":[{"ENDDATE":"2017-03-24","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170325":{"normal":[{"ENDDATE":"2017-03-26","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170327":{"normal":[{"ENDDATE":"2017-03-28","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170330":{"normal":[{"ENDDATE":"2017-03-31","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170401":{"normal":[{"ENDDATE":"2017-04-02","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170403":{"normal":[{"ENDDATE":"2017-04-04","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170406":{"normal":[{"ENDDATE":"2017-04-07","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170408":{"normal":[{"ENDDATE":"2017-04-09","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170410":{"normal":[{"ENDDATE":"2017-04-11","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170413":{"normal":[{"ENDDATE":"2017-04-14","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170415":{"normal":[{"ENDDATE":"2017-04-16","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170417":{"normal":[{"ENDDATE":"2017-04-18","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170420":{"normal":[{"ENDDATE":"2017-04-21","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170422":{"normal":[{"ENDDATE":"2017-04-23","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170424":{"normal":[{"ENDDATE":"2017-04-25","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170427":{"normal":[{"ENDDATE":"2017-04-28","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170429":{"normal":[{"ENDDATE":"2017-04-30","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170501":{"normal":[{"ENDDATE":"2017-05-02","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170504":{"normal":[{"ENDDATE":"2017-05-05","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170506":{"normal":[{"ENDDATE":"2017-05-07","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170508":{"normal":[{"ENDDATE":"2017-05-09","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170511":{"normal":[{"ENDDATE":"2017-05-12","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170513":{"normal":[{"ENDDATE":"2017-05-14","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170515":{"normal":[{"ENDDATE":"2017-05-16","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170518":{"normal":[{"ENDDATE":"2017-05-19","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170520":{"normal":[{"ENDDATE":"2017-05-21","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170522":{"normal":[{"ENDDATE":"2017-05-23","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170525":{"normal":[{"ENDDATE":"2017-05-26","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170527":{"normal":[{"ENDDATE":"2017-05-28","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170529":{"normal":[{"ENDDATE":"2017-05-30","STARTTIME":"0000","ENDTIME":"0000","PRESENTATION":"95042","PRIORITY":"normal","TITLE":"Pausesk%C3%A6rm"}]},"20170116":{"normal":[{"ENDDATE":"2017-01-16","STARTTIME":"0000","ENDTIME":"0000","PRIORITY":"normal","PRESENTATION":"85643","TITLE":"Kalender"}]}}'; 
$json_decode = (array)json_decode($array, true); 

class array_test_class{ 
private $_final_array = array(); 
private $_priorities = array("superadmin","high","normal"); 
private $_array   = array(); 

function __construct($arr=array()){ 
    $this->_array = $arr; 
} 

/** 
* sortByOrder function. 
* sorts the array by STARTTIME parameter, so the lowest one always will be shown first in the array 
* 
* @access public 
* @static 
* @param mixed $a 
* @param mixed $b 
* @return void 
*/ 
public static function sortByOrder($a, $b) { 
    return $a['STARTTIME'] - $b['STARTTIME']; 
} 

final function priorities(){ 
    return $this->_priorities; 
} 

/** 
* array_sort_final function. 
* This function sort the array by using sortByOrder function 
* 
* @access public 
* @final 
* @param int $index (default: 0) 
* @return void 
*/ 
final function array_sort_final($index=0){ 
    $new_tmp = array(); 
    foreach($this->_array as $key => $test){ 
     $tmp = $test; 
     usort($tmp, array('array_test_class','sortByOrder')); 
     $new_tmp[$key] = $tmp; 
    } 
    $this->_array = $new_tmp; 
} 

final function array_return(){ 
    asort($this->_final_array); 
    return $this->_final_array; 
} 

/** 
* array_create_conflicts_bookings function. 
* If theres a conflict between current priorities and higher level priorities this part will make sure the lower prioritie is only active 
* when theres a gap between the higher ones. 
* eg. If a high priorite event is running from 08.00 - 14.15 and theres a normal running from 07.30 - 21.00 it will split the normal event up into: 
* 07.30 - 08.00 (normal) 
* 08.00 - 14.15 (high) 
* 14.15 - 21.00 (normal) 
* 
* @access private 
* @final 
* @param mixed $_final_arr 
* @param mixed $_a 
* @param mixed $priority 
* @return void 
*/ 
private final function array_create_conflicts_bookings($_final_arr, $_a, $priority){ 
    usort($_final_arr, array('array_test_class','sortByOrder')); 
    $_a_start_time = $_a["STARTTIME"]; 
    $_a_end_time = $_a["ENDTIME"]; 

    $i = 0; 
    foreach($_final_arr as $_f_arr){ 
     $_f_start_time = $_f_arr["STARTTIME"]; 
     $_f_end_time = $_f_arr["ENDTIME"]; 
     $continue = false; 

     if($_a_start_time == $_a_end_time){ 
      $_a_end_time = "2400"; 
     } 

     if($_a_start_time < $_f_start_time){ 
      if(!isset($this->_final_array[$_a_start_time])){ 
       $this->_final_array[$_a_start_time] = array(
        "ENDDATE"  => $_a["ENDDATE"], 
        "STARTTIME"  => $_a_start_time, 
        "ENDTIME"  => $_f_start_time, 
        "PRESENTATION" => $_a["PRESENTATION"], 
        "TITLE"   => $_a["TITLE"], 
        "PRIORITY"  => $_a["PRIORITY"], 
       ); 
      } 
      $_a_start_time = $_f_end_time; 
     } 

     if($_a_end_time >= $_f_end_time){ 
      $_a_start_time = $_f_end_time; 
      if(!isset($this->_final_array[$_f_end_time])){ 
       $end = $_a_end_time; 
       if(isset($_final_arr[$i+1])){ 
        $end = $_final_arr[$i+1]["STARTTIME"]; 
       } 

       $this->_final_array[$_f_end_time] = array(
        "ENDDATE"  => $_a["ENDDATE"], 
        "STARTTIME"  => $_f_end_time, 
        "ENDTIME"  => ($end == "2400" ? "00000" : $end), 
        "PRESENTATION" => $_a["PRESENTATION"], 
        "TITLE"   => $_a["TITLE"], 
        "PRIORITY"  => $_a["PRIORITY"], 
       ); 
      } 
     } 
     $i++;  
    } 
} 

/** 
* array_create_bookings function. 
* This section creates the final array output and checks for conflicts, if theres a conflict the function array_create_conflicts_bookings will be run 
* 
* @access public 
* @final 
* @param int $priority (default: 0) 
* @param bool $check_for_matches (default: false) 
* @return void 
*/ 
final function array_create_bookings($priority=0, $check_for_matches=false){ 
    if($priority<3){ 
     if(!$check_for_matches){ 
      /* If its the first time we run the function it will always try to create the highest priority and run again in a loop and create next next priority events */ 
      if(isset($this->_array[$this->_priorities[$priority]])){ 
       foreach($this->_array[$this->_priorities[$priority]] as $_a){ 
        $this->_final_array[$_a["STARTTIME"]] = array(
         "ENDDATE"  => $_a["ENDDATE"], 
         "STARTTIME"  => $_a["STARTTIME"], 
         "ENDTIME"  => $_a["ENDTIME"], 
         "PRESENTATION" => $_a["PRESENTATION"], 
         "TITLE"   => $_a["TITLE"], 
         "PRIORITY"  => $_a["PRIORITY"], 
        ); 
       } 
      } 
      $this->array_create_bookings(($priority+1), true); 
     }else{ 
      /* If its not the first run it will go down here and check for conflicts, if there is no conflict it will create the event else it will go to function array_create_conflicts_bookings */ 
      if(isset($this->_array[$this->_priorities[$priority]])){ 
       foreach($this->_array[$this->_priorities[$priority]] as $_a){ 
        $_conflict = false; 
        $_conflicting_array = array(); 
        foreach($this->_final_array as $_final_key => $_final_arr){ 
         $tmp_end = $_a['ENDTIME']; 
         if($_a['ENDTIME'] == "0000"){ 
          $tmp_end = "2400"; 
         } 
         if (($_final_arr['STARTTIME'] <= $tmp_end) && ($_final_arr['ENDTIME'] >= $_a['STARTTIME'])) { 
          $_conflicting_array[] = $_final_arr; 
          $_conflict = true; 
         } 
        } 
        if($_conflict){ 
         $this->array_create_conflicts_bookings($_conflicting_array, $_a, $priority); 
        } 
        if(!$_conflict){ 
         $this->_final_array[$_a["STARTTIME"]] = array(
          "ENDDATE"  => $_a["ENDDATE"], 
          "STARTTIME"  => $_a["STARTTIME"], 
          "ENDTIME"  => $_a["ENDTIME"], 
          "PRESENTATION" => $_a["PRESENTATION"], 
          "TITLE"   => $_a["TITLE"], 
          "PRIORITY"  => $_a["PRIORITY"], 
         ); 
        } 
       } 
      } 
      $this->array_create_bookings(($priority+1), true); 
     } 
    } 
} 

final function array_to_parse($arr){ 
    $this->_this_array = array(); 
    foreach($arr as $key => $arrs){ 
     $this->_final_array = array(); 
     $this->_array = $arrs; 
     $this->array_sort_final(); 
     $this->array_create_bookings(); 

     asort($this->_final_array); 

     $this->_this_array[$key] = $this->_final_array; 
    } 

    /* The end result */ 
    echo "<pre style='margin: 0; display: inline-block; width: 40%; background-color: #d1d2d4; vertical-align:top; padding: 10px 20px 20px 20px; box-sizing: border-box;'>"; 
    echo "<h2>Test</h2>"; 
    print_r($this->_this_array); 
    echo "</pre>"; 
} 
} 

$array_test_class = new array_test_class(); 
$array_test_class->array_to_parse($json_decode); /* $json_decode contains the booked elements i need to sort each day */