sensus
@sensus

Как разобрать массивы по принципу, кто последний того и тапки?

Приветствую!
Я уже наверное всех достал с этими массивами.
Суть в том, что есть массивы дат с значениями (значения могут быть чем угодно, для примера алфавит)
Надо как то их разобрать, при условии что следующий массив всегда верны и заменяет/делит предыдущий.
Покажу наглядно.

Пример исходных данных
array:3 [
  0 => array:6 [
    "2018-03-05" => "a"
    "2018-03-06" => "b"
    "2018-03-07" => "c"
    "2018-03-08" => "d"
    "2018-03-09" => "e"
    "2018-03-10" => "f"
  ]
  1 => array:4 [
    "2018-03-07" => "g"
    "2018-03-08" => "h"
    "2018-03-09" => "i"
    "2018-03-10" => "k"
  ]
  2 => array:8 [
    "2018-03-01" => "l"
    "2018-03-02" => "m"
    "2018-03-03" => "n"
    "2018-03-04" => "o"
    "2018-03-05" => "p"
    "2018-03-06" => "q"
    "2018-03-07" => "r"
    "2018-03-08" => "s"
  ]
  3 => array:3 [
    "2018-03-04" => "t"
    "2018-03-05" => "v"
  ]
]


Как добиться подобного результата? (порядок массивов не важен)
Рекурсиями гонять?

array:3 [
  0 => array:3 [
    "2018-03-01" => "l"
    "2018-03-02" => "m"
    "2018-03-03" => "n"
  ]
 1 => array:2 [
    "2018-03-04" => "t"
    "2018-03-05" => "v"
  ]
 2 => array:3 [
    "2018-03-06" => "q"
    "2018-03-07" => "r"
    "2018-03-08" => "s"
  ]
 3 => array:2 [
    "2018-03-09" => "i"
    "2018-03-10" => "k"
  ]
]


Я уже всю голову себе сломал...
Как я понимаю: берем последний массив, пробегаем даты по всем другим массивам.
Если находим пересечение, то дробим...
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 2
@grinat
Делай рекурсии, в php 7 может даже есть поддержка хвостовых рекурсий.
Ответ написан
sgjurano
@sgjurano
Разработчик
Заводите структуру данных "множество".
Проходите по внешнему списку в обратном порядке, для каждого элемента вложенных списков проверяете есть ли такой элемент в множестве, если нет - добавляете в множество и в результирующий список.

Не понятно по какому принципу вы разбиваете элементы по спискам.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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