尝试 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);
这是我遇到错误的代码:
$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);