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

时间:2014-08-14 14:03:08

标签: php arrays regex

使用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;
    }
}

如何通过在原始数组($matched_word)中引用它来获得相同的结果,但也能够回显$dictionary

因此,如果$input "棕色水果" ,那就意味着$matched_word &# 34;褐色" ;如果$input "那个黄色的东西" 那么$matched_word将是"黄色&#34 ; 。 然后我希望能够像这样更改数组值:

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

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

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

1 个答案:

答案 0 :(得分:0)

你可以写

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

然后

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