@mixejuxix

Как преобразовать дерево в несколько плоских массивов?

Привет, есть задача валидировать дерево средствами laravel, для этого там используются правила, типа таких:
'questions.0.answers.0.questions.0.text' => 'required'
'questions.0.answers.0.questions.1.text' => 'required'
'questions.0.answers.1.questions.0.text' => 'required'

Для генерации подобных правил я хочу преобразовать дерево в плоские массивы, но немогу допетрить до алгоритма :-(

К примеру есть дерево:
Что будете есть?
        Торт
        Пирог
        Суп
            Какой?
                Борщ
                Солянка

Нужно разложить его в массивы

['Что будете есть?']
['Что будете есть?', 'Торт']
['Что будете есть?', 'Пирог']
['Что будете есть?', 'Суп']
['Что будете есть?', 'Суп', 'Какой?']
['Что будете есть?', 'Суп', 'Какой?', 'Борщ']
['Что будете есть?', 'Суп', 'Какой?', 'Солянка']


При этом данные немного сложнее:
json

[
  {
    "text": true,
    "content": "Что будете есть?",
    "child": [
      {
        "text": true,
        "content": "Торт",
      },
      {
        "text": true,
        "content": "Пирог",
      },
      {
        "text": true,
        "content": "Суп",
        "child": [
          {
            "text": true,
            "content": "Какой?",
            "child": [
              {
                "text": true,
                "content": "Борщ",
              },
              {
                "text": true,
                "content": "Солянка",
              }
            ]
          }
        ]
      }
    ]
  }
]



И раскладывать их надо соответственно в двумерный массив:
примерно так

[[text => true, content => 'Что будете есть?']],
[[text => true, content => 'Что будете есть?'], [text => true, content => 'Торт']]
[[text => true, content => 'Что будете есть?'], [text => true, content => 'Пирог']]
[[text => true, content => 'Что будете есть?'], [text => true, content => 'Суп']]
[[text => true, content => 'Что будете есть?'], [text => true, content => 'Суп'], [text => true, content => 'Какой?']]
и так далее



Так же, возможно, в laravel есть какие то более правильные способы валидации дерева?

Спасибо!
  • Вопрос задан
  • 139 просмотров
Пригласить эксперта
Ответы на вопрос 1
Приветствую!
То, что вам нужно, скорее всего Helper Arr::dot самого Laravel.

Запихнул ваш json в dot и вывалил через dd(), получил:

5df0e0f9d1953668298532.jpeg

P.S. Соответственно алгоритм генерации подобного, вы можете глянуть через Ctrl + ЛКМ по функции в вашей IDE. (Если используете софт от JetBrains)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 20:24
10000 руб./за проект
24 апр. 2024, в 19:51
1000 руб./за проект