oont-contents/plugins/mailpoet/vendor-prefixed/symfony/translation/Util/ArrayConverter.php
2025-02-08 15:10:23 +01:00

73 lines
1.6 KiB
PHP

<?php
namespace MailPoetVendor\Symfony\Component\Translation\Util;
if (!defined('ABSPATH')) exit;
class ArrayConverter
{
public static function expandToTree(array $messages)
{
$tree = [];
foreach ($messages as $id => $value) {
$referenceToElement =& self::getElementByPath($tree, self::getKeyParts($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);
}
}
}
private static function getKeyParts(string $key) : array
{
$parts = \explode('.', $key);
$partsCount = \count($parts);
$result = [];
$buffer = '';
foreach ($parts as $index => $part) {
if (0 === $index && '' === $part) {
$buffer = '.';
continue;
}
if ($index === $partsCount - 1 && '' === $part) {
$buffer .= '.';
$result[] = $buffer;
continue;
}
if (isset($parts[$index + 1]) && '' === $parts[$index + 1]) {
$buffer .= $part;
continue;
}
if ($buffer) {
$result[] = $buffer . $part;
$buffer = '';
continue;
}
$result[] = $part;
}
return $result;
}
}