@masterit15

Как отфилтровать массив в php удалить дубликаты и объеденить значение уникальных ключей в одну строку?

Всем доброго времени суток, отчаялся совсем, нуждаюсь в помощи. Возникла необходимость парсить json по ссылке, собственно получил я данные как массив выглядят они следующим образом
Array
(
    [0] => Array
        (
            [ID] => 105653877
            [CABLAB_NAME] => Участок
            [DEPARTMENT_NAME] => Отдел
            [DEPARTMENT_KIND] => 6405222
            [EMPLOYER_ID] => 78621962
            [EMPLOYER_NAME] => Иванов И. И.
            [SERVICE_ID] => 
            [SERVICE_NAME] => 
            [DEVICE_NAME] => 
            [DAY_NUMBER] => 1
            [HOURS_BEGIN] => 08
            [MINS_BEGIN] => 00
            [HOURS_END] => 14
            [MINS_END] => 00
            [TIME_BEGIN_S] => 08:00
            [TIME_END_S] => 14:00
            [TIME_TYPE] => 6338504
            [TIME_TYPE_CODE] => 1
            [RCOUNT] => 1
            [RCOUNTMAX] => 
            [TIME_OR_COUNT] => 0
            [RTIME_PRIM] => 15
            [SORT_F] => 2
            [ONLY_VIEW] => 0
        )

    [1] => Array
        (
            [ID] => 105653877
            [CABLAB_NAME] => Участок
            [DEPARTMENT_NAME] => Отдел
            [DEPARTMENT_KIND] => 6405222
            [EMPLOYER_ID] => 78621962
            [EMPLOYER_NAME] => Иванов И. И.
            [SERVICE_ID] => 
            [SERVICE_NAME] => 
            [DEVICE_NAME] => 
            [DAY_NUMBER] => 3
            [HOURS_BEGIN] => 08
            [MINS_BEGIN] => 00
            [HOURS_END] => 14
            [MINS_END] => 00
            [TIME_BEGIN_S] => 08:00
            [TIME_END_S] => 14:00
            [TIME_TYPE] => 6338504
            [TIME_TYPE_CODE] => 1
            [RCOUNT] => 1
            [RCOUNTMAX] => 
            [TIME_OR_COUNT] => 0
            [RTIME_PRIM] => 15
            [SORT_F] => 2
            [ONLY_VIEW] => 0
        )

    [2] => Array
        (
            [ID] => 105653877
            [CABLAB_NAME] => Участок
            [DEPARTMENT_NAME] => Отдел
            [DEPARTMENT_KIND] => 6405222
            [EMPLOYER_ID] => 78621962
            [EMPLOYER_NAME] => Иванов И. И.
            [SERVICE_ID] => 
            [SERVICE_NAME] => 
            [DEVICE_NAME] => 
            [DAY_NUMBER] => 5
            [HOURS_BEGIN] => 08
            [MINS_BEGIN] => 00
            [HOURS_END] => 14
            [MINS_END] => 00
            [TIME_BEGIN_S] => 08:00
            [TIME_END_S] => 14:00
            [TIME_TYPE] => 6338504
            [TIME_TYPE_CODE] => 1
            [RCOUNT] => 1
            [RCOUNTMAX] => 
            [TIME_OR_COUNT] => 0
            [RTIME_PRIM] => 15
            [SORT_F] => 2
            [ONLY_VIEW] => 0
        )

так в чем собственно сложность, мне нужно вывести что-бы дубликаты были удалены, а значение ключа которые отличаются записать в одну строку таким образом
Array
(
    [0] => Array
        (
            [ID] => 105653877
            [CABLAB_NAME] => Участок
            [DEPARTMENT_NAME] => Отдел
            [DEPARTMENT_KIND] => 6405222
            [EMPLOYER_ID] => 78621962
            [EMPLOYER_NAME] => Иванов И. И.
            [SERVICE_ID] => 
            [SERVICE_NAME] => 
            [DEVICE_NAME] => 
            [DAY_NUMBER] => 1, 3, 5
            [HOURS_BEGIN] => 08
            [MINS_BEGIN] => 00
            [HOURS_END] => 14
            [MINS_END] => 00
            [TIME_BEGIN_S] => 08:00
            [TIME_END_S] => 14:00
            [TIME_TYPE] => 6338504
            [TIME_TYPE_CODE] => 1
            [RCOUNT] => 1
            [RCOUNTMAX] => 
            [TIME_OR_COUNT] => 0
            [RTIME_PRIM] => 15
            [SORT_F] => 2
            [ONLY_VIEW] => 0
        )

может задача и легкая, но я не дружу с php, в общем облазил форумы искал примеры и ничего, заранее благодарю!
  • Вопрос задан
  • 338 просмотров
Решения вопроса 1
lidacriss
@lidacriss
wtf
Если нужно смотреть только на 'DAY_NUMBER', то примерно так:
Наш массив
$arr = [
    [
        'ID' => '105653877',
        'CABLAB_NAME' => 'Участок',
        'DEPARTMENT_NAME' => 'Отдел',
        'DEPARTMENT_KIND' => '6405222',
        'EMPLOYER_ID' => '78621962',
        'EMPLOYER_NAME' => 'Иванов И. И.',
        'SERVICE_ID' => '',
        'SERVICE_NAME' => '',
        'DEVICE_NAME' => '',
        'DAY_NUMBER' => '1',
        'HOURS_BEGIN' => '08',
        'MINS_BEGIN' => '00',
        'HOURS_END' => '14',
        'MINS_END' => '00',
        'TIME_BEGIN_S' => '08:00',
        'TIME_END_S' => '14:00',
        'TIME_TYPE' => '6338504',
        'TIME_TYPE_CODE' => '1',
        'RCOUNT' => '1',
        'RCOUNTMAX' => '',
        'TIME_OR_COUNT' => '0',
        'RTIME_PRIM' => '15',
        'SORT_F' => '2',
        'ONLY_VIEW' => '0',
    ],
    [
        'ID' => '105653877',
        'CABLAB_NAME' => 'Участок',
        'DEPARTMENT_NAME' => 'Отдел',
        'DEPARTMENT_KIND' => '6405222',
        'EMPLOYER_ID' => '78621962',
        'EMPLOYER_NAME' => 'Иванов И. И.',
        'SERVICE_ID' => '',
        'SERVICE_NAME' => '',
        'DEVICE_NAME' => '',
        'DAY_NUMBER' => '3',
        'HOURS_BEGIN' => '08',
        'MINS_BEGIN' => '00',
        'HOURS_END' => '14',
        'MINS_END' => '00',
        'TIME_BEGIN_S' => '08:00',
        'TIME_END_S' => '14:00',
        'TIME_TYPE' => '6338504',
        'TIME_TYPE_CODE' => '1',
        'RCOUNT' => '1',
        'RCOUNTMAX' => '',
        'TIME_OR_COUNT' => '0',
        'RTIME_PRIM' => '15',
        'SORT_F' => '2',
        'ONLY_VIEW' => '0',
    ],
    [
        'ID' => '105653877',
        'CABLAB_NAME' => 'Участок',
        'DEPARTMENT_NAME' => 'Отдел',
        'DEPARTMENT_KIND' => '6405222',
        'EMPLOYER_ID' => '78621962',
        'EMPLOYER_NAME' => 'Иванов И. И.',
        'SERVICE_ID' => '',
        'SERVICE_NAME' => '',
        'DEVICE_NAME' => '',
        'DAY_NUMBER' => '5',
        'HOURS_BEGIN' => '08',
        'MINS_BEGIN' => '00',
        'HOURS_END' => '14',
        'MINS_END' => '00',
        'TIME_BEGIN_S' => '08:00',
        'TIME_END_S' => '14:00',
        'TIME_TYPE' => '6338504',
        'TIME_TYPE_CODE' => '1',
        'RCOUNT' => '1',
        'RCOUNTMAX' => '',
        'TIME_OR_COUNT' => '0',
        'RTIME_PRIM' => '15',
        'SORT_F' => '2',
        'ONLY_VIEW' => '0',
    ]
];
$new_arr = [];
foreach ($arr as $index => $item) {
    $id = $item['ID'];
    $new_arr[$id] = $new_arr[$id] ?? $item;
    $day = $item['DAY_NUMBER'];
    $days = explode(', ', $new_arr[$id]['DAY_NUMBER']);
    if (!in_array($day, $days))
        $days[] = $day;
    sort($days);
    $new_arr[$id]['DAY_NUMBER'] = implode(', ', $days);
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@masterit15 Автор вопроса
близко, но они так же повторяются и он добавляет в каждый следующий дубликат предыдущее значение то есть
Array
(
    [0] => Array
        (
            [ID] => 105653877
            [CABLAB_NAME] => Участок
            [DEPARTMENT_NAME] => Отдел
            [DEPARTMENT_KIND] => 6405222
            [EMPLOYER_ID] => 78621962
            [EMPLOYER_NAME] => Иванов И. И.
            [SERVICE_ID] => 
            [SERVICE_NAME] => 
            [DEVICE_NAME] => 
            [DAY_NUMBER] => 1, 3, 5
            [HOURS_BEGIN] => 08
            [MINS_BEGIN] => 00
            [HOURS_END] => 14
            [MINS_END] => 00
            [TIME_BEGIN_S] => 08:00
            [TIME_END_S] => 14:00
            [TIME_TYPE] => 6338504
            [TIME_TYPE_CODE] => 1
            [RCOUNT] => 1
            [RCOUNTMAX] => 
            [TIME_OR_COUNT] => 0
            [RTIME_PRIM] => 15
            [SORT_F] => 2
            [ONLY_VIEW] => 0
        )

    [1] => Array
        (
            [ID] => 105653877
            [CABLAB_NAME] => Участок
            [DEPARTMENT_NAME] => Отдел
            [DEPARTMENT_KIND] => 6405222
            [EMPLOYER_ID] => 78621962
            [EMPLOYER_NAME] => Иванов И. И.
            [SERVICE_ID] => 
            [SERVICE_NAME] => 
            [DEVICE_NAME] => 
            [DAY_NUMBER] => 1, 3
            [HOURS_BEGIN] => 08
            [MINS_BEGIN] => 00
            [HOURS_END] => 14
            [MINS_END] => 00
            [TIME_BEGIN_S] => 08:00
            [TIME_END_S] => 14:00
            [TIME_TYPE] => 6338504
            [TIME_TYPE_CODE] => 1
            [RCOUNT] => 1
            [RCOUNTMAX] => 
            [TIME_OR_COUNT] => 0
            [RTIME_PRIM] => 15
            [SORT_F] => 2
            [ONLY_VIEW] => 0
        )

    [2] => Array
        (
            [ID] => 105653877
            [CABLAB_NAME] => Участок
            [DEPARTMENT_NAME] => Отдел
            [DEPARTMENT_KIND] => 6405222
            [EMPLOYER_ID] => 78621962
            [EMPLOYER_NAME] => Иванов И. И.
            [SERVICE_ID] => 
            [SERVICE_NAME] => 
            [DEVICE_NAME] => 
            [DAY_NUMBER] => 1, 3, 5
            [HOURS_BEGIN] => 08
            [MINS_BEGIN] => 00
            [HOURS_END] => 14
            [MINS_END] => 00
            [TIME_BEGIN_S] => 08:00
            [TIME_END_S] => 14:00
            [TIME_TYPE] => 6338504
            [TIME_TYPE_CODE] => 1
            [RCOUNT] => 1
            [RCOUNTMAX] => 
            [TIME_OR_COUNT] => 0
            [RTIME_PRIM] => 15
            [SORT_F] => 2
            [ONLY_VIEW] => 0
        )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы