<?php
function replace2($matches, $replacements, $frame) {
if (!isset($matches[0]) || !is_array($matches[0]) || empty($matches[0])) {
return [];
}
$result = [];
foreach ($matches[0] as $value) {
if (isset($replacements[$value])) {
foreach ($replacements[$value] as $v) {
$tmp = str_replace($value, $v, $frame);
$result[$tmp] = null;
array_shift($matches);
replace2($matches, $replacements, $frame);
}
}
}
return $result;
}
function doStuff($frame) {
$replacements = [
'{childName}' => [],
'{favoriteFood}' => ['pizza', 'soup', 'burger'],
'{favoriteToy}' => ['doll', 'teddy bear', 'truck', 'computer']
];
preg_match_all('/'.implode('|', array_keys($replacements)).'/', $frame, $matches);
if (count($matches[0]) < 1) {
return [$frame => null];
}
return replace2($matches, $replacements, $frame);
}
$frames = [
'{childName} loves to eat {favoriteFood} and play with his or her {favoriteToy}',
'{childName} loves to eat {favoriteFood}',
'{childName} loves to play'
];
foreach ($frames as $frame) {
var_dump(doStuff($frame));
echo "\n";
}
preferences:
58.21 ms | 402 KiB | 5 Q