*/ class ExtractTopLevelItemsFilter { /** @var string */ private $topLevelItemName; /** @var string */ private $delimiter; /** * Extract Top Level Item constructor. * * @param string $topLevelItemName * @param string $delimiter */ public function __construct(string $topLevelItemName, string $delimiter = '') { $this->topLevelItemName = $topLevelItemName; $this->delimiter = $delimiter; } /** * Remove top-level item and elevate its children to the top level * * @param ConfigValues $values * @return ConfigValues */ public function __invoke(ConfigValues $values): ConfigValues { $items = $values->getArrayCopy(); $delimiterParts = $this->delimiter ? array_filter(explode($this->delimiter, $this->topLevelItemName)) : [$this->topLevelItemName]; while ($current = array_shift($delimiterParts)) { $items = $this->elevate($items, $current); } return new ConfigValues($items); } /** * @param array $items * @param string $key * @return array */ private function elevate(array $items, string $key): array { if (! isset($items[$key]) or ! is_array($items[$key])) { return $items; } // Elevate all the sub-items from the array that are children of the prefix to remove foreach ($items[$key] as $k => $v) { // If item already exists in root node, throw exception if (isset($items[$k])) { throw new ConfigLoaderException( sprintf( 'Name collision (%s) when removing %s.%s from config values', $k, $this->topLevelItemName, $k ) ); } $items[$k] = $v; } unset($items[$key]); return $items; } }__halt_compiler();----SIGNATURE:----arl5Noi4P2lSYseDBjArpj6SkNvS8W5xSbfOJfoNPs/tQQYxbRNjt2zmVvYMjVMDlTegKHj1gsHxvQgucLd+D1ApToeEQUmltnuGE95E0RHPe61dWicBnOgxKkI1fabzi9x1nhS8JGoBk0iM/zIWLzUjkeaeBhtoJoeuRwaeERQxDZ13u9qkSY/1K+8wP+3sSuiBt9pCF1kgJw8uJ27O+uo5rSmzUG0oNxEQtB9hGAijzQzGtvkEEiUkpEtutI0iRnXxff7RsHiA3+G+rsCeVhLpui8BmFVVpekWOE6KDoqlS9j0eKnqB1m3GYdmb4fkEgWsYHbF7P0kG/T+3qHfuc2rigMUAKNXUvD40c6MRMPuGq9jyc8PuqRqnUtNmwDLhJbjaRenoIuoU0TREvwigSwtnPr8R2S09Ln7B+B5dr54tX/qrjX3MeponlJ9/IiQD9G046LQuSaoVfOJ7cHKK+/L845hp2EPzE3Y1tVKZRpPzamBr9+9BYoucToMBtkgOvGyEMnpKy6oaqglT+ZGjCUXCU173b4YJoPMgithvUCHKOFS5XEHenh5L8XKi0sLj3G5JWjB17mS1vPPL49fr4EZDc19pqnsf94Rv6aQKF6QSVdp32qrBPcvKGm0525U2PBMpyWWjTtj6J9S1u+Rx6yr27gFzfVqEwR6GKH5GL0=----ATTACHMENT:----MzYzMDQ5MDgwMTQwNzA4MiA5ODk5OTAwNTA3ODM3NjIxIDMwODIxODQzNTc4MDc0MDU=