热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php定义数组依次读取_PHP使用数组依次替换字符串中匹配项

先来看个sql语句:select*fromtablewherectime[date-14]andctime

先来看个sql语句:

select * from table where ctime >&#61; &#39;[date-14]&#39; and ctime <&#61; &#39;[date-1]&#39;;

想把上面这句sql的中括号表示的日期依次换成下面的数组中的元素array(&#39;2015-07-01&#39;,&#39;2015-07-15&#39;);

用正则匹配:找到第一个中括号部分,用第一个元素替换,然后找第二个,再替换

用sprintf函数&#xff1a;因为日期已经计算好,按照顺序替换就可以了.

23ed4a47e37647e471f29c9646846d71.png

因为markdown写正则比较麻烦,这里就直接上图片了

ps:设想一下,如sql中只有一个需要替换的时间条件,就需要修改成

$sql &#61; sprintf($sql,$arr[0])

说白了呢就是如果sprintf函数支持第二个参数是数组就太好了。查了一番之后确实可以有解决办法&#xff1a;

call_user_func_array() 官方的解释是:

call_user_func_array — 调用回调函数&#xff0c;并把一个数组参数作为回调函数的参数

mixed call_user_func_array ( callable $callback , array $param_arr )

把第一个参数作为回调函数(callback)调用&#xff0c;把参数数组作(param_arr)为回调函数的的参数传入。

也就是说:第一个参数是你想要使用的函数名(上文中的sprintf),第二个参数是将要使用函数的参数,只不过参数是以数组形式传给了call_user_func_arrayok,这样的话就可以实现动态的替换了

$param &#61; $arr;

array_unshift($param,$sql);

$sql &#61; call_user_func_array(&#39;sprintf&#39;,$param);

接下来介绍str_replace — 子字符串替换&#xff0c;数组替换

说明

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

该函数返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果。

如果有一些特殊的替换需求(比如正则表达式)&#xff0c;你应该使用该函数替换 ereg_replace() 和 preg_replace()。

参数

如果 search 和 replace 为数组&#xff0c;那么 str_replace() 将对 subject 做二者的映射替换。如果 replace 的值的个数少于 search 的个数&#xff0c;多余的替换将使用空字符串来进行。如果 search 是一个数组而 replace 是一个字符串&#xff0c;那么 search 中每个元素的替换将始终使用这个字符串。该转换不会改变大小写。

如果 search 和 replace 都是数组&#xff0c;它们的值将会被依次处理。

search

查找的目标值&#xff0c;也就是 needle。一个数组可以指定多个目标。

replace

search 的替换值。一个数组可以被用来指定多重替换。

subject

执行替换的数组或者字符串。也就是 haystack。

如果 subject 是一个数组&#xff0c;替换操作将遍历整个 subject&#xff0c;返回值也将是一个数组。

count

Note: 如果被指定&#xff0c;它将控制匹配和替换的次数。

返回值

该函数返回替换后的数组或者字符串。

版本 说明

5.0.0 新增 count 参数。

4.3.3 函数行为改变。旧的版本中存在一个 BUG —— 当 search 和 replace 两个参数都是数组的时候&#xff0c;将导致空的 search 索引被跳过&#xff0c;但是却没有同时前移 replace 内部指针。该错误发生在 PHP

4.3.3&#xff0c;任何依赖于此 BUG 的脚本应该先除去空的查找值&#xff0c;从而模拟原始的行为。

4.0.5 大多数参数都可以为数组。

范例

Example #1 str_replace() 基本范例

// 赋值:

$bodytag &#61; str_replace("%body%", "black", "

");

// 赋值: Hll Wrld f PHP

$vowels &#61; array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");

$onlyconsonants &#61; str_replace($vowels, "", "Hello World of PHP");

// 赋值: You should eat pizza, beer, and ice cream every day

$phrase &#61; "You should eat fruits, vegetables, and fiber every day.";

$healthy &#61; array("fruits", "vegetables", "fiber");

$yummy &#61; array("pizza", "beer", "ice cream");

$newphrase &#61; str_replace($healthy, $yummy, $phrase);

// 赋值: 2

$str &#61; str_replace("ll", "", "good golly miss molly!", $count);

echo $count;

?>

Example #2 可能的 str_replace() 替换范例

// 替换顺序

$str &#61; "Line 1\nLine 2\rLine 3\r\nLine 4\n";

$order &#61; array("\r\n", "\n", "\r");

$replace &#61; &#39;
&#39;;

// 首先替换 \r\n 字符&#xff0c;因此它们不会被两次转换

$newstr &#61; str_replace($order, $replace, $str);

// 输出 F &#xff0c;因为 A 被 B 替换&#xff0c;B 又被 C 替换&#xff0c;以此类推...

// 由于从左到右依次替换&#xff0c;最终 E 被 F 替换

$search &#61; array(&#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;);

$replace &#61; array(&#39;B&#39;, &#39;C&#39;, &#39;D&#39;, &#39;E&#39;, &#39;F&#39;);

$subject &#61; &#39;A&#39;;

echo str_replace($search, $replace, $subject);

// 输出: apearpearle pear

// 由于上面提到的原因

$letters &#61; array(&#39;a&#39;, &#39;p&#39;);

$fruit &#61; array(&#39;apple&#39;, &#39;pear&#39;);

$text &#61; &#39;a p&#39;;

$output &#61; str_replace($letters, $fruit, $text);

echo $output;

?>

注释

Note: 此函数可安全用于二进制对象。

Caution

了解替换顺序

由于 str_replace() 的替换时从左到右依次进行的&#xff0c;进行多重替换的时候可能会替换掉之前插入的值。参见该文档的范例。

Note:

该函数区分大小写。使用 str_ireplace() 可以进行不区分大小写的替换。



推荐阅读
  • 本文作为“实现简易版Spring系列”的第五篇,继前文深入探讨了Spring框架的核心技术之一——控制反转(IoC)之后,将重点转向另一个关键技术——面向切面编程(AOP)。对于使用Spring框架进行开发的开发者来说,AOP是一个不可或缺的概念。了解AOP的背景及其基本原理,对于掌握这一技术至关重要。本文将通过具体示例,详细解析AOP的实现机制,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • 在HTML布局中,即使将 `top: 0%` 和 `left: 0%` 设置为元素的定位属性,浏览器中仍然会出现空白填充。这个问题通常与默认的浏览器样式、盒模型或父元素的定位方式有关。为了消除这些空白,可以考虑重置浏览器的默认样式,确保父元素的定位方式正确,并检查是否有其他CSS规则影响了元素的位置。 ... [详细]
  • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
  • 如何在C#中配置组合框的背景颜色? ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • 深入解析数据库中的存储过程与触发器技术
    本文深入探讨了数据库中的存储过程与触发器技术。存储过程是一组预编译的SQL语句,经过优化后存储在数据库服务器中,以提高执行效率。在大型数据库系统中,通过调用存储过程的名字,用户可以快速执行复杂的操作,从而提升系统的性能和响应速度。此外,触发器作为一种特殊的存储过程,能够在特定事件发生时自动执行,进一步增强了数据库的自动化管理和数据完整性。 ... [详细]
  • 在Python多进程编程中,`multiprocessing`模块是不可或缺的工具。本文详细探讨了该模块在多进程管理中的核心原理,并通过实际代码示例进行了深入分析。文章不仅总结了常见的多进程编程技巧,还提供了解决常见问题的实用方法,帮助读者更好地理解和应用多进程编程技术。 ... [详细]
  • 如何利用正则表达式(regexp)实现高效的模式匹配?本文探讨了正则表达式在编程中的应用,并分析了一个示例程序中存在的问题。通过具体的代码示例,指出该程序在定义和使用正则表达式时的不当之处,旨在帮助读者更好地理解和应用正则表达式技术。 ... [详细]
  • 本文探讨了在PHP中实现MySQL分页查询功能的优化方法与实际应用。通过详细分析分页查询的常见问题,提出了多种优化策略,包括使用索引、减少查询字段、合理设置缓存等。文章还提供了一个具体的示例,展示了如何通过优化模型加载和分页参数设置,显著提升查询性能和用户体验。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
  • 依然最钟爱《People Have the Power》,强烈推荐大家聆听这首经典之作
    尽管今日情绪低落,我在音乐库中反复筛选,最终还是选择了《People Have the Power》来激励自己。这首歌不仅旋律动听,歌词也充满力量,能够带给人正能量。强烈建议大家找来聆听,体验其独特的魅力。《People Have the Power》虽然不是出自专辑《Horses》,但同样是一首不可多得的经典之作。 ... [详细]
  • 在 CentOS 7 系统中安装 Scrapy 时遇到了一些挑战。尽管 Scrapy 在 Ubuntu 上安装简便,但在 CentOS 7 上需要额外的配置和步骤。本文总结了常见问题及其解决方案,帮助用户顺利安装并使用 Scrapy 进行网络爬虫开发。 ... [详细]
author-avatar
色花君子fds_181
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有