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

php-使用正则表达式结果的动态数组元素值,php,arrays,regex,Php,Arrays,Regex,使用PHP,我有一个foreach循环,它通过关联数组循环,并根据正则表达式preg\u match\u all的结果回显特定元素的值,如下所示: $dictionary = array( '/red/' => 'cherry', '/green/' => 'apple', '/(brown|yellow)/' => 'banana', '/(orange|purple)/' => 'I like the ' ); $input

使用PHP,我有一个
foreach
循环,它通过关联数组循环,并根据正则表达式
preg\u match\u 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\u word
)来回显

因此,如果
$input
“一个棕色的水果”,这意味着
$matched\u word
是“棕色的”;如果
$input
“黄色的东西”,那么
$matched\u word
将是“黄色的”。 然后我希望能够像这样更改数组值:

...
    '/(brown|yellow)/' => 'banana is ' . $matched_word,
    '/(orange|purple)/' => 'I like the ' . $matched_word
...
但在这种情况下,
$matched_word
似乎不存在。我如何在不完全重写逻辑的情况下达到同样的效果

编辑:为代码添加了一些说明-正则表达式模式和输出可能完全不同

你可以写

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

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

“引用回声”是什么意思?在循环中,
echo“$result是$matched\u word”
如何?呃,如果您正在匹配
/red/
,那么
$matches
数组将没有键
1
,因此
$results[1][0]
将发出通知。无论哪种方式,您都需要:
$matched\u word=array\u pop($results);echo$output,'is',$matched_wourd[0]。很明显,一些模式比其他模式产生更多的结果,这就是为什么我不想在循环中回显
$matched\u word
。此外,在某些情况下,我想打印“香蕉是(单词)”,而在其他情况下,我只想呼应“苹果”。“引用回声”在技术上可能毫无意义,我不太确定该怎么说;第二个代码块是我所说的“通过引用进行回声”的意思。我希望我说的很清楚。@Jason:如果($output==='banana')echo$output,'is',$matchedWord;否则,输出为$?我希望循环尽可能通用,因此任何特定于“dictionary”的内容都保留在数组中。但是——我想我可能可以按照这些思路做一些事情:使用正则表达式匹配的数组元素值将以一些“magic word”开头,以及替换假人,如:
if(substr($output,0,5)=='magic'){$output=substr($output,5,strlen($output)-1);echo str_replace('REPLACEME',$matched_word,$output)}else{echo$output;}
。我说得通吗?