用Preg进入我的脑袋

时间:2010-11-10 21:42:46

标签: php arrays preg-match preg-replace-callback

我有一个字符串,其中包含[realtor:name]或[office:phone]形式的html和“tags”。我有一个(CakePHP生成的)数据库数据数组,这样房地产经纪人的名字可以在$ data ['Realtor'] ['name']找到,办公室电话在$ data ['Office'] ['phone' ]

我想对字符串进行查找和替换,用正确的数据替换每个标记,可能使用preg_replace_callback。不过,我是一个新手,所以这是我得到的最接近的,而且我确信这是非常缓慢和低效的:

function template_swap($html, $data) {

    preg_match_all('/\[(.*):(.*)\]/', $html, $matches, PREG_SET_ORDER);

    foreach ($matches as $match) {
        if (isset( $data[ ucfirst($match[1]) ] )) {
            if (array_key_exists( $match[2], $data[ ucfirst($match[1]) ] )) {
                $html = str_replace( 
                    $match[0],
                    $data[ ucfirst($match[1]) ][ $match[2] ],
                    $html
                );
            }
        }
    }

    return html;
}

任何人都可以帮我解决一些关于更好地完成这项工作的想法吗?

1 个答案:

答案 0 :(得分:0)

/\[\s*\'([^\']*)\'\s*\]\s*:\s*\[\s*\'([^\']*)\'\s*\]/