PHP从一个数组中创建预订信息,每个日期具有不同的优先级和时间范围,这是';不允许重叠

PHP从一个数组中创建预订信息,每个日期具有不同的优先级和时间范围,这是';不允许重叠,php,arrays,sorting,overlap,Php,Arrays,Sorting,Overlap,我有以下PHP数组: Array ( [20170118] => Array ( [1420] => Array ( [ENDDATE] => 2017-01-18 [STARTTIME] => 1420 [ENDTIME] => 1530 [PRIORITY] => superadmi

我有以下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
            )
    )
)

我用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 */