Как на 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;
}