function array_merge_recursive_config(array $array1, array $array2)
 {
     $merged = $array1;
     foreach ($array2 as $key => &$value) {
         if (is_null($value)) {
             // we want to unset the key in $array1
             unset($merged[$key]);
         } elseif (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) {
             $merged[$key] = array_merge_recursive_config($merged[$key], $value);
         } else {
             $merged[$key] = $value;
         }
     }
     return $merged;
 }
 protected function mergeConfigsFromPath($path)
 {
     $configs = [];
     $ids = [];
     $dependencies = [];
     // read the differents config files
     foreach (glob($path . '/*.config.php') as $configFile) {
         $id = basename($configFile, '.config.php');
         $configs[$id] = (include $configFile);
         $ids[] = $id;
         if (isset($configs[$id]['_import'])) {
             $configs[$id]['_import'] = (array) $configs[$id]['_import'];
             foreach ($configs[$id]['_import'] as $dependency) {
                 $dependencies[] = [$dependency, $id];
             }
             unset($configs[$id]['_import']);
         }
     }
     if (count($configs) > 1) {
         $ids = \topological_sort($ids, $dependencies);
         if (empty($ids)) {
             throw new \RuntimeException('Cannot sort configs');
         }
     }
     // merge them in a logical order
     $config = [];
     foreach ($ids as $id) {
         $config = \array_merge_recursive_config($config, $configs[$id]);
     }
     return $config;
 }