123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- <?php
- namespace Symfony\Component\Translation\Util;
- class ArrayConverter
- {
-
- public static function expandToTree(array $messages)
- {
- $tree = [];
- foreach ($messages as $id => $value) {
- $referenceToElement = &self::getElementByPath($tree, explode('.', $id));
- $referenceToElement = $value;
- unset($referenceToElement);
- }
- return $tree;
- }
- private static function &getElementByPath(array &$tree, array $parts)
- {
- $elem = &$tree;
- $parentOfElem = null;
- foreach ($parts as $i => $part) {
- if (isset($elem[$part]) && \is_string($elem[$part])) {
-
- $elem = &$elem[implode('.', \array_slice($parts, $i))];
- break;
- }
- $parentOfElem = &$elem;
- $elem = &$elem[$part];
- }
- if ($elem && \is_array($elem) && $parentOfElem) {
-
- self::cancelExpand($parentOfElem, $part, $elem);
- }
- return $elem;
- }
- private static function cancelExpand(array &$tree, string $prefix, array $node)
- {
- $prefix .= '.';
- foreach ($node as $id => $value) {
- if (\is_string($value)) {
- $tree[$prefix.$id] = $value;
- } else {
- self::cancelExpand($tree, $prefix.$id, $value);
- }
- }
- }
- }
|