Php 尝试preg_replace$1变量时,传递的参数无效错误

Php 尝试preg_replace$1变量时,传递的参数无效错误,php,preg-replace,Php,Preg Replace,这是我收到的错误代码: $show_nav = preg_replace('#\{\$SUBMENU([0-9]+)\}#',implode("\n",$sub_menu['submenu$1']),$show_nav); 基本上,我想用子菜单数组中的数据替换$show_nav变量中的字符串,比如{$SUBMENU2}。我进行了测试,如果我手动输入以下数字,效果很好: $show_nav = preg_replace('#\{\$SUBMENU([0-9]+)\}#',implode("\n"

这是我收到的错误代码:

$show_nav = preg_replace('#\{\$SUBMENU([0-9]+)\}#',implode("\n",$sub_menu['submenu$1']),$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]+)\}#','$1',$show_nav);
它用{$SUBMENU}字符串中的内容替换字符串。所以如果它的{$subnum3}它给了我3,{$subnum5}它给了我5。但我似乎无法让它动态读取$1变量。我尝试添加了花括号,仍然是相同的错误:

$show_nav = preg_replace('#\{\$SUBMENU([0-9]+)\}#',implode("\n",$sub_menu['submenu{$1}']),$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);
你的朋友是:

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

你需要一个preg_替换_回调。啊,谢谢!当它让我接受你的答案时,我会接受的,再次感谢!
$show_nav = preg_replace_callback(
            '#\{\$SUBMENU([0-9]+)\}#',
            function($m) use($sub_menu) {
                  return implode("\n",$sub_menu['submenu'.$m[$1]])
            },
            $show_nav);