PHP数组值替换问题:将元素中的's'改为'l'失败,求技术帮助
解决PHP数组中替换字符's'为'l'的问题
嘿,我来帮你看看这段代码的问题哈~你的代码没法实现需求主要有这几个原因:
- 循环里你拿
$key和带正则的字符串比较,但$key其实是数组的数字索引(0、1、2这些),根本不是数组元素的内容,这完全搞错了对比对象; - 直接用
==去匹配.*?这种正则语法是没用的,PHP不会把它当成正则表达式解析,得用专门的正则匹配函数; - 替换的时候你直接写了个带占位符的字符串,这不会实际替换掉目标位置的
s,而且循环里修改的$value是临时变量,不会影响原数组,最后只输出最后一个$value也看不到所有修改后的结果。
下面给你几种可行的解决办法,按需选就行:
方法1:用str_replace快速替换
如果你的每个路径里只有这一个s需要替换,直接用str_replace最省事:
<?php $array = array( "romeo/echo/julion/1991s/1992.jpg", "romeo/echo/julion/1257s/1258.jpg", "romeo/echo/julion/1996s/1965.jpg", ); // 循环遍历数组,修改原数组的对应元素 foreach ($array as $key => $value) { $array[$key] = str_replace('s', 'l', $value); } // 输出整个修改后的数组 print_r($array); ?>
方法2:用preg_replace精准匹配(避免误替换)
要是担心字符串里还有其他s会被误改,可以用正则精准匹配那个在数字后面、斜杠前面的s:
<?php $array = array( "romeo/echo/julion/1991s/1992.jpg", "romeo/echo/julion/1257s/1258.jpg", "romeo/echo/julion/1996s/1965.jpg", ); foreach ($array as $key => $value) { // 匹配数字+ s + 斜杠的组合,把s换成l $array[$key] = preg_replace('/(\d)s\//', '$1l/', $value); } print_r($array); ?>
方法3:用array_map简化代码
喜欢简洁写法的话,用array_map可以一行处理整个数组:
<?php $array = array( "romeo/echo/julion/1991s/1992.jpg", "romeo/echo/julion/1257s/1258.jpg", "romeo/echo/julion/1996s/1965.jpg", ); // 用匿名函数处理每个元素,生成新数组 $modifiedArray = array_map(function($item) { return str_replace('s', 'l', $item); }, $array); print_r($modifiedArray); ?>
运行任意一段代码,都能得到所有目标s被替换成l的数组啦~
内容的提问来源于stack exchange,提问作者Rheyza Virgiawan D'first
相关产品推荐
相关产品推荐

