PHP 从数组创建预订信息,每个日期具有不同的优先级和时间范围,不允许重叠
PHP create booking info from an array with different priorities and times ranges per date which ain't allowed to overlap
我有以下 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
)
)
)
我需要对这个数组做的是它应该创建一个包含这些元素的新数组,但开始时间和结束时间不会相互重叠。
(超级管理员优先级最高,普通级最低)
- 超级管理员应该一直都在。
- 如果不与超级管理员重叠,High 应该是全长。
normal 只有在它们不与其他优先级重叠时才应该存在。
新数组应该如下所示:
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 */
我有以下 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
)
)
)
我需要对这个数组做的是它应该创建一个包含这些元素的新数组,但开始时间和结束时间不会相互重叠。
(超级管理员优先级最高,普通级最低)
- 超级管理员应该一直都在。
- 如果不与超级管理员重叠,High 应该是全长。 normal 只有在它们不与其他优先级重叠时才应该存在。
新数组应该如下所示:
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 */