Как вырастить массив внуков на уровне детей

У меня проблемы с родительским массивом, который содержит несколько дочерних массивов. Необходимо, чтобы дочерний массив не содержал других дочерних массивов, но если это так, то поднимать эти внуки массива на уровень дочерних элементов.

[0] => Array (
    [0] => Array (
        [name] => ...
        [count] => ...
        [url] => ...
        [html] => ...
    )
    [1] => Array (
        [name] => ...
        [count] => ...
        [url] => ...
    )
    [2] => Array (
        [1] => Array (
            [name] => ...
            [count] => ...
            [url] => ...
            [html] => ...
        )
        [2] => Array (
            [name] => ...
            [count] => ...
            [url] => ...
        )
    )
    [3] => Array (
        [name] => ...
        [count] => ...
        [url] => ...
    )
    [4] => Array (
        [name] => ...
        [count] => ...
        [url] => ...
    )
);

В примере array["2"] содержит 2 массива, я хочу, чтобы 2 массива поднялись на один уровень и стали братьями, а не детьми.

Не могли бы вы мне помочь с правильной функцией?

function transformMultipleArraysTo1(array $multipleArrays = null)
{
    $newArray = array();
    if (!isArrayEmpty($multipleArrays)) {
        foreach ($multipleArrays as $array) {
            if (is_array($array)) {
                foreach ($array as $singleArray) {
                    if (is_array($singleArray)) {
                        $newArray[] = $singleArray;
                    } else {
                        continue 2;
                    }
                }
                $newArray[] = $array;
            }
        }
    }
    return $newArray;
}

Большое спасибо

Привет, Йона, не могли бы вы поделиться кодом, который вы уже пытались написать? Таким образом мы можем помочь вам исправить это

scrowler 18.10.2018 12:29

Йона, пожалуйста, добавьте это к вопросу

scrowler 18.10.2018 12:31

Это не дубликат, потому что мне нужно хранить ключи и значения!

Yona Smilevitch 18.10.2018 13:59

Можно ли вообще получить массив, в котором внуки являются массивами? Под этим я подразумеваю, возможно ли в вашем коде, что вы мая получите массив, как вы описали? И если да, можно ли этого избежать?

D.Schaller 18.10.2018 14:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
140
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я придумал это решение, не самое красивое, но оно работает.

function RemoveThoseNastyGrandchildren(array $array = NULL){
  foreach ($array as $ckey => $child) {
    foreach($child as $gckey => $grandchild){
      if (is_array($grandchild)){
        $array[] = $grandchild;
        array_splice($array[$ckey],$gckey);
      }
    }
  }
  $length = count($array);
  for($i = 0; $i < $length ; $i++){
    if (!empty($array[$i][0]) && is_array($array[$i][0])){
      array_splice($array,$i,1);
      $i = -1;
      $length = count($array);
    }
  }
  //print("<pre>".print_r($array,true)."</pre>"); <---- To print it pretty uncomment
  return $array;
}

Первый цикл:

переберем всех родственников в поисках потенциальных внуков. Если он найдет одного из этих мерзких внуков, он присоединит его к своим родителям, снова став великийдети.


После этого нам остается только разобрать тела бывших внуков, и вот что ...


Второй цикл:

Он перебирает измененный массив в поисках пустых тел. Затем верните недавно сформированные множествосемейное древо и свист, вы избавились от этих GC.

«if ($ array [$ i] [0] === NULL)» - не лучший вариант! но "if (! empty ($ array [$ i] [0]) && is_array ($ array [$ i] [0])" В любом случае, большое спасибо :)

Yona Smilevitch 18.10.2018 15:34

@YonaSmilevitch Я соответственно отредактировал ответ. Примите его, если ответ вас информирует и решил вашу проблему.

D.Schaller 18.10.2018 15:47

Это именно то, что я сделал

Yona Smilevitch 18.10.2018 15:49

Другие вопросы по теме