使用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'";");