尝试 preg_replace $1 变量时获取无效参数传递错误

Getting invalid argument passed error when trying to preg_replace $1 variable

这是我遇到错误的代码:

$show_nav = preg_replace('#\{$SUBMENU([0-9]+)\}#',implode("\n",$sub_menu['submenu']),$show_nav);

所以基本上我想用子菜单数组中的数据替换 $show_nav 变量中的字符串,例如 {$SUBMENU2}。我测试过,如果我像这样手动输入数字,它就可以正常工作:

$show_nav = preg_replace('#\{$SUBMENU([0-9]+)\}#',implode("\n",$sub_menu['submenu2']),$show_nav);

我还通过这样做验证了正则表达式正在获取正确的变量:

$show_nav = preg_replace('#\{$SUBMENU([0-9]+)\}#','',$show_nav);

它将字符串替换为在 {$SUBMENU} 字符串中找到的内容。因此,如果它的 {$SUBMENU3} 返回 3,{$SUBMENU5} 返回 5。但我似乎无法让它动态读取 $1 变量。我尝试添加大括号,仍然是同样的错误:

$show_nav = preg_replace('#\{$SUBMENU([0-9]+)\}#',implode("\n",$sub_menu['submenu{}']),$show_nav);

或:

$show_nav = preg_replace('#\{$SUBMENU([0-9]+)\}#',implode("\n",$sub_menu['{submenu}']),$show_nav);

我知道输入错误,但想不出正确的输入方法。有什么建议吗?

****更新**** 感谢 Toto 和 Wiktor Stribiżew 提供的建议这是解决我问题的代码,再次感谢!!!

$show_nav = preg_replace_callback(
'#\{$SUBMENU([0-9]+)\}#',
function($m) use($sub_menu) {

if(isset($sub_menu['submenu' .$m[1]]))
                                        {
return '<ul class="nav-dropdown">' .implode("\n",$sub_menu['submenu' .$m[1]]) .'</ul>';

}

},$show_nav);

preg_replace_callback是你的朋友:

$show_nav = preg_replace_callback(
            '#\{$SUBMENU([0-9]+)\}#',
            function($m) use($sub_menu) {
                  return implode("\n",$sub_menu['submenu'.$m[]])
            },
            $show_nav);