<?php
/**
* Resolves dependencies of strings.
*
* @param array $strings An array of strings, where each string may have a 'depends_on' key.
* @return array An array of strings with resolved dependencies. Returns original array if errors occur.
*/
function resolveStringDependencies(array $strings): array
{
$resolvedStrings = [];
$dependencies = [];
// First pass: Collect all dependencies
foreach ($strings as $string) {
if (isset($string['depends_on']) && is_array($string['depends_on'])) {
$dependencies = array_merge($dependencies, $string['depends_on']);
}
}
$resolvedStrings = $strings; // Start with a copy
$changed = true;
while ($changed) {
$changed = false;
foreach ($resolvedStrings as $string) {
if (isset($string['depends_on']) && is_array($string['depends_on'])) {
$canResolve = true;
foreach ($string['depends_on'] as $dependency) {
if (!isset($resolvedStrings[$dependency])) {
// Dependency not found, cannot resolve
$canResolve = false;
break;
}
}
if ($canResolve) {
// Resolve dependencies
foreach ($string['depends_on'] as $dependency) {
$string['resolved_value'] = $resolvedStrings[$dependency]; // Store resolved value for debugging
unset($string['depends_on']); // Remove dependency after resolving
}
$changed = true;
}
}
}
}
return $resolvedStrings;
}
//Example Usage (for testing)
/*
$strings = [
['name' => 'A', 'depends_on' => ['B', 'C']],
['name' => 'B', 'depends_on' => ['D']],
['name' => 'C', 'depends_on' => []],
['name' => 'D', 'depends_on' => []],
['name' => 'E', 'depends_on' => ['A']],
];
$resolved = resolveStringDependencies($strings);
foreach ($resolved as $string) {
echo "String: " . $string['name'] . ", Resolved Value: " . ($string['resolved_value'] ?? 'N/A') . PHP_EOL;
}
*/
?>
Add your comment