Необходимо преобразовать массив исходя из его определенной структуры, php
Массив вида (данный массив приходит после обработки csv файла):
Array
(
[0] => Array
(
[0] => Аренда
[1] =>
[2] =>
[3] =>
)
[1] => Array
(
[0] =>
[1] => Аренда спецтехники
[2] =>
[3] =>
)
[2] => Array
(
[0] =>
[1] =>
[2] => Аренда автобетононасоса
[3] =>
)
[3] => Array
(
[0] =>
[1] =>
[2] => Аренда автовышки
[3] =>
)
[4] => Array
(
[0] =>
[1] =>
[2] => Аренда автогрейдера
[3] =>
)
[5] => Array
(
[0] =>
[1] =>
[2] => Аренда автокрана
[3] =>
)
[6] => Array
(
[0] =>
[1] =>
[2] => Аренда бульдозера
[3] =>
)
[7] => Array
(
[0] =>
[1] =>
[2] => Аренда гидромолота
[3] =>
)
[8] => Array
(
[0] =>
[1] =>
[2] => Аренда гидроподъемника
[3] =>
)
Должен быть преобразован к массиву вида:
Array
(
[0] => Array
(
[0] => Аренда
[1] => Аренда спецтехники
[2] => Array
(
[0] => Аренда автобетононасоса
[1] => Аренда автовышки
[2] => Аренда автогрейдера
[3] => Аренда автокрана
....
)
[3] =>
)
[1] => Array
(
[0] => Категория
[1] => Подкатегория категории
[2] => Array
(
....сервисы подкатегории...
[0] => сервис
[1] => сервис
[2] => сервис
[3] => сервис
....
)
[3] =>
)
......
)
Ответы (2 шт):
Автор решения: frozencoast
→ Ссылка
Попробуйте использовать это:
function convert($arr) {
$result = array();
if (is_array($arr)) {
foreach ($arr as $item) {
merge($result, $item);
}
}
return $result;
}
function merge(&$node, $item) {
if (is_array($item)) {
foreach ($item as $k => $v) {
if (isset($node[$k])) {
merge($node[$k], $v);
} else {
$node[$k] = $v;
}
}
} elseif ($item) {
if (is_array($node)) {
$node[] = $item;
} elseif ($node) {
$node = array($node, $item);
} else {
$node = $item;
}
}
return $node;
}
echo '<pre>';
print_r($arr);
print_r(convert($arr));
echo '</pre>';
Автор решения: splash58
→ Ссылка
То, что сказано в вопросе можно сделать таким образом
function myjoin(...$arrs) {
$arrs = array_filter($arrs);
return count($arrs) == 1 ? array_shift($arrs) : $arrs;
}
$res = array_map('myjoin', ...$arr);