我想使用短代码包含文件,但问题是preg_replace在for循环中无法正常工作。我的代码如下:
<?php
$output = "[@include('file1')] [@include('file2')]";
if(preg_match_all("/\[\@include\(\'(.*?)\'\)\]/", $output, $match)){
for($i=0;$i<count($match);$i++){
$output = preg_replace("/\[\@include\(\'(.*?)\'\)\]/", $match[1][$i], $output);
}
}
echo $output;
上面的代码打印“file1 file1”,它应该打印“file1 file2”这两个文件名但是它不打印这两个文件名。请告诉我哪里错了。
答案 0 :(得分:0)
您正在寻找的内容已经在正则表达式的输出数组中(即在$match
数组中),您只需要使用implode()
获取它!
<?php
$output = "[@include('file1')] [@include('file2')]";
preg_match_all("/\[\@include\(\'(.*?)\'\)\]/", $output, $match);
echo $out = implode(' ', $match[1]);
?>