Как объединить массив с тем же временем окончания с следующим временем начала массива - PullRequest
0 голосов
/ 05 октября 2019

Я хочу объединить массив в один массив, если время окончания первого массива и время начала второго массива совпадают.

[2019-10-07] => Array
    (


        [0] => Array
            (
                [start_time] => 09:00:00
                [end_time] => 12:00:00
                [working_id] => 55
            )

        [1] => Array
            (
                [start_time] => 12:00:00
                [end_time] => 13:00:00
                [working_id] => 58
            )

        [2] => Array
            (
                [start_time] => 13:00:00
                [end_time] => 18:00:00
                [working_id] => 56
            )

    )

Вывод: -

[2019-10-07] => Array
        (
            [0] => Array
                (
                    [start_time] => 09:00:00
                    [end_time] => 18:00:00
                )
)

1 Ответ

0 голосов
/ 05 октября 2019

Вам нужно использовать цикл foreach, и для каждого цикла вы можете использовать array_column, чтобы получить все значения start_time и end_time. Затем вы можете использовать функции max и min для получения значений max и min соответственно.

$data = array(
    '2019-10-07' => 
    array
        (
            '0' => array
                (
                    'start_time' => '09:00:00',
                    'end_time' => '12:00:00',
                    'working_id' => 55,
                ),

            '1' => array
                (
                    'start_time' => '12:00:00',
                    'end_time' => '13:00:00',
                    'working_id' => 58,
                ),

            '2' => array
                (
                    'start_time' => '13:00:00',
                    'end_time' => '18:00:00',
                    'working_id' => 56,
                ),

        ),
);

$format = array();
foreach( $data as $key => $a ) {
    $format[$key][0] = array();
    $startTimes = array_column( $a, 'start_time');    //get all values with key start_time
    $endTimes = array_column( $a, 'end_time');        //get all values with key end_time
    $format[$key][0]['start_time'] = min( $startTimes );    //get minimum value
    $format[$key][0]['end_time'] = max( $endTimes );        //get maximum value

}
echo '<pre>';
print_r($format);

Вот Demo .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...