3v4l.org

run code in 300+ PHP versions simultaneously
<?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