<?php
/**
* Resolves dependencies of text files.
*
* @param array $files An array of file paths.
* @return array An associative array where keys are file paths and values are arrays of dependencies.
* Returns an empty array if input is invalid.
*/
function resolveDependencies(array $files): array
{
if (empty($files)) {
return []; // Handle empty input
}
$dependencies = [];
$fileMap = [];
// Build a map of files to their content and dependency information.
foreach ($files as $filePath) {
if (!file_exists($filePath)) {
error_log("File not found: " . $filePath); // Log missing file
continue; // Skip to the next file
}
$fileContent = file_get_contents($filePath);
$fileMap[$filePath] = [
'content' => $fileContent,
'dependencies' => [],
];
// Extract dependencies from the file content. This example assumes a simple "requires:" format.
preg_match_all('/requires:\s*([\w\s,]+)/', $fileContent, $matches);
if (!empty($matches[1])) {
$dependencies[$filePath] = explode(',', trim(str_replace(' ', '', $matches[1][0]))); // Split dependencies by comma
}
}
// Resolve dependencies recursively.
foreach ($fileMap as $filePath => $fileInfo) {
foreach ($fileInfo['dependencies'] as $dependencyPath) {
if (isset($fileMap[$dependencyPath])) {
// Dependency exists, add it to the current file's dependencies
$fileInfo['dependencies'][] = $dependencyPath;
} else {
// Dependency doesn't exist, log an error.
error_log("Dependency not found: " . $dependencyPath . " for file: " . $filePath);
}
}
}
return $dependencies;
}
//Example usage (can be removed for production)
/*
$files = [
'file1.txt',
'file2.txt',
'file3.txt'
];
//Create dummy files for testing
file_put_contents('file1.txt', 'This is file 1. requires: file2, file3');
file_put_contents('file2.txt', 'This is file 2. requires: file3');
file_put_contents('file3.txt', 'This is file 3.');
$resolvedDependencies = resolveDependencies($files);
print_r($resolvedDependencies);
//Clean up dummy files
unlink('file1.txt');
unlink('file2.txt');
unlink('file3.txt');
*/
?>
Add your comment