1) { $relativePathParts = array_pad($relativePathParts, -$pathPartsCount, '*'); } $realPath = []; foreach ($relativePathParts as $index => $path) { if ($path === '*') { if (false == array_key_exists($index, $pathParts)) { throw new \InvalidArgumentException( sprintf('Invalid relative path %s in %s node', $relativePath, $nodePath) ); } $path = $pathParts[$index]; } $realPath[$index] = $path; } return implode('/', $realPath); } }