I am trying to develop an algorithm for creating a symfony template service. I want to check if a pattern exists in a subset of the paths ordered.
Given an array of parameters like this (already ordered as I want):
$params = ['O', 'U', 'W', 'P']
How can I infer this array?
$urls = [
'O/U/W/P/template',
'O/U/W/template',
'O/U/P/template',
'O/U/template',
'O/W/P/template',
'O/W/template',
'O/P/template',
'O/template',
'U/W/P/template',
'U/W/template',
'U/P/template',
'U/template',
'W/P/template',
'W/template',
'P/template',
'template'
];
I can execute for a small list of parameters (for example, anyone can do this, I suppose) with this code:
private function getPaths($template, $params)
{
$urls = [];
$alreadyPerform = [];
$paramsCounter = count($params);
for ($i = 0; $i < $paramsCounter; $i++) {
for ($j = 0; $j < $paramsCounter; $j++) {
if ($i !== $j && !in_array($params[$j], $alreadyPerform, true)) {
$urls[] = sprintf(
'/%s/%s/%s.html.twig', $params[$i], $params[$j], $template
);
}
}
$alreadyPerform[] = $params[$i];
$urls[] = sprintf('/%s/%s.html.twig', $params[$i], $template);
}
$urls[] = sprintf('%s.html.twig', $template);
return $urls;
}
This function works the way I wanted until today (maximum 3 parameters), but I want to add one parameter today, possibly more after.
Many thanks for your help!
Greetings.