我正在尽力为Tom Mc Farlin为梦幻般的WordPress插件Boilerplate构建一个生成器。一切都很顺利。我从github加载文件,将其解压缩到一个目录并替换所有需要的字符串,如'plugin_name','你的名字'等。
不幸的是,有一个名为$ plugin_name的受保护类变量和一些其他微小的位。所以我决定在更换后“修复”一些缺陷,如下所示:
// Repair some flaws
$repair_file = $newAbsDir.'/plugin-name/trunk/includes/class-'.$new_plugin_name.'.php';
$repair_file_content = file_get_contents($repair_file);
$repair_strings = array(
'$'.$new_plugin_name => '$plugin_name',
'$this->'.$new_plugin_name => '$this->plugin_name',
'get_'.$new_plugin_name => 'get_plugin_name'
);
foreach($repair_strings as $string => $replace){
$repair_file_content = str_replace($string, $replace, $repair_file_content);
}
file_put_contents($repair_file, $repair_file_content);
对于我的glob文件数组来说,看起来效果很好,但根本无法解决上述问题。我认为它与美元符号有关。有人知道如何解决这个问题吗?
答案 0 :(得分:1)
来自PHP manual:
如果搜索且替换是数组,那么
str_replace()
会从每个数组中获取一个值并使用它们来搜索和替换主题强>
所以,就像Elias Van Ootegem said一样,做一个没有str_replace()
的简单foreach()
。数组值在文字数组和array_keys()
上的键上传递。由于数组键是要搜索的键,因此必须反转数组:
$repair_strings = array(
'$plugin_name' => '$'.$new_plugin_name,
'$this->plugin_name' => '$this->'.$new_plugin_name,
'get_plugin_name' => 'get_'.$new_plugin_name
);
$repair_file_content = str_replace( array_keys( $repair_strings ), $repair_strings, $repair_file_content );
反转数组只是为了保持逻辑search => replace
,但是要使用原始数组,它应该是:
$repair_file_content = str_replace( $repair_strings, array_keys( $repair_strings ), $repair_file_content );
答案 1 :(得分:0)
D'哦......
$ My_fantastic_plugin与$ my_fantastic_plugin略有不同。很抱歉有麻烦,感谢您对$repair_file_content = str_replace( array_keys( $repair_strings ), $repair_strings, $repair_file_content );