如何在str_replace中使用搜索数组并将匹配内容替换为对应找到的搜索值
你原有写法运行失败的核心原因有两个:
- 直接把数组
$search_array和字符串拼接,PHP会强制把数组转为字符串,最终只会得到固定的Array文本,无法对应每个匹配项的内容 str_replace如果传入字符串作为替换值,所有匹配到的搜索项都会被替换成同一个值,无法实现每个匹配项对应不同的按钮文本。
实现方案
方案1:搭配array_map生成对应替换数组(适合固定搜索项场景)
提前遍历你的搜索数组,生成和搜索项一一对应的替换数组,再传入str_replace即可:
<?php $search_array = array("**JOB DESCRIPTION1**","**JOB DESCRIPTION2**","**JOB DESCRIPTION3**"); // 生成一一对应的替换数组 $replace_array = array_map(function($match_item) { // trim($match_item, '*') 是去掉匹配内容前后的**,如果需要保留可以直接用$match_item return '<button>Click here to replace '.trim($match_item, '*').'</button>'; }, $search_array); $string = "**JOB DESCRIPTION1** does this objective, and **JOB DESCRIPTION2** does this."; $new_string = str_replace($search_array, $replace_array, $string); ?>
方案2:用preg_replace_callback正则匹配(适合规则化的搜索场景)
如果你的搜索项都是**JOB DESCRIPTION+数字**格式,不需要提前罗列所有搜索项,直接用正则匹配处理即可:
<?php $string = "**JOB DESCRIPTION1** does this objective, and **JOB DESCRIPTION2** does this."; $new_string = preg_replace_callback( '/\*\*JOB DESCRIPTION\d+\*\*/', // 匹配符合格式的内容 function($matches) { return '<button>Click here to replace '.trim($matches[0], '*').'</button>'; }, $string ); ?>
内容的提问来源于stack exchange,提问作者Ian Castillo
相关产品推荐
相关产品推荐

