使用正则表达式结果的动态数组元素值


Dynamic array element value using regular expression result

使用PHP,我有一个foreach循环,它循环遍历关联数组并根据正则表达式preg_match_all的结果回显特定元素的值,如下所示:

$dictionary = array(
    '/red/' => 'cherry',
    '/green/' => 'apple',
    '/(brown|yellow)/' => 'banana',
    '/(orange|purple)/' => 'I like the '
    );
$input = $_POST['color'];
foreach ($dictionary as $pattern => $output) {
    if (preg_match_all($pattern, $input, $results)) {
        $matched_word = $results[1][0];
        echo $output;
    }
}

我怎样才能达到同样的结果,但也能够通过在原始数组($dictionary)中引用它来回声$matched_word ?

所以如果$input"a brown fruit",这就意味着$matched_word"brown";如果$input"那个黄色的东西",那么$matched_word就是"黄色"。然后我希望能够像这样改变数组的值:

...
    '/(brown|yellow)/' => 'banana is ' . $matched_word,
    '/(orange|purple)/' => 'I like the ' . $matched_word
...

但在这种情况下,$matched_word似乎不存在。如何在不完全重写逻辑的情况下达到相同的效果?

EDIT:添加了一些澄清代码- regex模式和输出可能完全不同。

你可以写

...
    '/(brown|yellow)/' => 'banana is $matched_word',
    '/(orange|purple)/' => 'I like the $matched_word'
...

        eval("echo '"$output'";");