Как я могу преобразовать вывод парсера Symfony yaml в полностью ассоциативный формат?

У меня есть файл .yaml, как это.

Folder1:
- Hello_.doc
- Folder2:
- Hello__.doc
- World__.pdf
- Folder3:
- Hello__.doc
- Folder4:
- Hello___.doc
- Folder5:
- Hello____.doc
- Folder6:
- Hello____.doc

После этого я анализирую его с помощью Symfony YAML-парсера и получаю такой результат.

$data = Array
(
[Folder1] => Array
(
[0] => Hello_.doc
[1] => Array
(
[Folder2] => Array
(
[0] => Hello__.doc
[1] => World__.pdf
)

)

[2] => Array
(
[Folder3] => Array
(
[0] => Hello__.doc
[1] => Array
(
[Folder4] => Array
(
[0] => Hello___.doc
[1] => Array
(
[Folder5] => Array
(
[0] => Hello____.doc
)

)

[2] => Array
(
[Folder6] => Array
(
[0] => Hello____.doc
)

)

)

)

)

)

)

)

Но мне нужно преобразовать данные массива в формат ниже:

Array
(
[Folder1] => Array
(
[0] => Hello_.doc
[Folder2] => Array
(
[0] => Hello__.doc
[1] => World__.pdf
)

[Folder3] => Array
(
[0] => Hello__.doc
[Folder4] => Array
(
[0] => Hello___.doc
[Folder5] => Array
(
[0] => Hello____.doc
)

[Folder6] => Array
(
[0] => Hello____.doc
)

)

)

)

);

Я создал такую ​​функцию.

function normalizeData($data) {
foreach ($data as $ky => $row) {

if (is_array($row)) {
foreach ($row as $k => $v) {
if (is_numeric($k) && is_array($v)) {
$key = key($v);
if (! is_numeric($key)) {
$data[$ky][$key] = $v[$key];
unset($data[$ky][$k]);
}
} elseif (is_string($k) && is_array($v)) { // associative

foreach ($v as $kk => $vv) {
if (is_numeric($kk) && is_array($vv)) {
$key_ = key($vv);
if (! is_numeric($key_)) {
$data[$ky][$k][$key_] = $vv[$key_];
unset($data[$ky][$k][$kk]);
}
} elseif (is_string($kk) && is_array($vv)) {

// We need recursive in here..
//
foreach ($vv as $kkk => $vvv) {

if (is_numeric($kkk) && is_array($vvv)) {
$key__ = key($vvv);
if (! is_numeric($key__)) {
$data[$ky][$k][$kk][$key__] = $vvv[$key__];
unset($data[$ky][$k][$kk][$kkk]);
}
} elseif (is_string($kkk) && is_array($vvv)) {

/// recursive

}

}

}
}
}
}
}
}
return $data;
}

Но я должен вызвать эту функцию три раза, чтобы нормализовать данные.

$data = normalizeData($data);
$data = normalizeData($data);
$data = normalizeData($data);

Как я могу создать чистую рекурсивную функцию?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]