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

Подскажите, пожалуйста, как из многоуровневого массива такого типа:

array:3 [▼
  "name" => "futbolki"
  "title" => "футболки"
  "parrent" => array:3 [▼
    "name" => "futbolki-i-polo"
    "title" => "футболки и поло"
    "parrent" => array:3 [▼
      "name" => "odezhda"
      "title" => "одежда"
      "parrent" => array:2 [▼
        "name" => "odezhda-obuv-i-aksessuary"
        "title" => "одежда, обувь и аксессуары"
      ]
    ]
  ]
]

получить нечто похожее на такой формат:

$array[0] = [
  "name" => "futbolki"
  "title" => "футболки"
]
$array[1] = [
  "name" => "futbolki-i-polo"
  "title" => "футболки и поло"
]
$array[2] = [
  "name" => "odezhda"
  "title" => "одежда"
]
$array[3] = [
  "name" => "odezhda-obuv-i-aksessuary"
  "title" => "одежда, обувь и аксессуары"
]

Заранее спасибо!


Ответы (2 шт):

Автор решения: HardlinePeak

Вот рабочее решение, но в следующий раз сделайте сами, ведь это так просто (:

<?php
function convert(array $array) {
    $result = [];
    $result[] = [
        "name" => $array["name"],
        "title" => $array["title"]
    ];
    if (isset($array["parrent"]))
        $result = array_merge($result, convert($array["parrent"]));
    return $result;
}
var_dump(convert([
  "name" => "futbolki",
  "title" => "футболки",
  "parrent" => [
    "name" => "futbolki-i-polo",
    "title" => "футболки и поло",
    "parrent" => [
      "name" => "odezhda",
      "title" => "одежда",
      "parrent" => [
        "name" => "odezhda-obuv-i-aksessuary",
        "title" => "одежда, обувь и аксессуары"
      ]
    ]
  ]
]));

Результат:

array(4) {
  [0]=>
  array(2) {
    ["name"]=>
    string(8) "futbolki"
    ["title"]=>
    string(16) "футболки"
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(15) "futbolki-i-polo"
    ["title"]=>
    string(28) "футболки и поло"
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(7) "odezhda"
    ["title"]=>
    string(12) "одежда"
  }
  [3]=>
  array(2) {
    ["name"]=>
    string(25) "odezhda-obuv-i-aksessuary"
    ["title"]=>
    string(48) "одежда, обувь и аксессуары"
  }
}

P.s.Хочу заметить, что в этом коде НЕ проверяются типы значений и НЕ добавляются в результат значения кроме "name" и "title"!

→ Ссылка
Автор решения: splash58

При такой структуре данных можно обойтись без рекурсии, что всегда хорошо:

function convert(array $array)
{
    $result = [];   
    while($array) {
        $result[] = [
            "name" => $array["name"],
            "title" => $array["title"]
        ];
        $array = $array["parrent"] ?? [];
    }
    return $result;
}
→ Ссылка