字符串替换不起作用。我忽略了什么吗?

时间:2014-09-06 16:47:10

标签: php wordpress

我正在尽力为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文件数组来说,看起来效果很好,但根本无法解决上述问题。我认为它与美元符号有关。有人知道如何解决这个问题吗?

2 个答案:

答案 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 );

的好建议