php str_replace与preg_replace用法区别

 更新时间:2016年11月25日 16:48  点击:1705

str_replace() 函数使用一个字符串替换字符串中的另一些字符。

简单替换

<?php教程
echo str_replace("world","john","hello world!");
?>

替换数据

<?php
echo str_replace("world","john","hello world!");
?>

利用正则表达式来替换

语法:stringobj.replace(rgexp, replacetext)
用str.replace("|",",") 只会替换第一个匹配的字符, str.replace(/|/g,",")则可以替换掉全部匹配的字符(g为全局标志)。


语法
preg_replace(find,replace,string,count)

preg_replace -- 执行正则表达式的搜索和替换
说明
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])


在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。

实例

<?php
$string = "april 15, 2003";
$pattern = "/(/w+) (/d+), (/d+)/i";
$replacement = "/${1}1,/$3";
print preg_replace($pattern, $replacement, $string);

/* output
   ======

april1,2003

*/
?>

替换数个值

<?php
$patterns = array ("/(19|20)(/d{2})-(/d{1,2})-(/d{1,2})/",
                   "/^/s*{(/w+)}/s*=/");
$replace = array ("//3///4///1//2", "$//1 =");
print preg_replace ($patterns, $replace, "{startdate} = 1999-5-27");
?>

本例将输出:

$startdate = 5/27/1999
 


例子 4. 使用 /e 修正符

<?php
preg_replace ("/(<//?)(/w+)([^>]*>)/e",
              "'//1'.strtoupper('//2').'//3'",
              $html_body);
?>

这将使输入字符串中的所有 html 标记变成大写
 

区别preg_replace函数主要用于正则比较方便而str_replace替换字符效率更好,但他们都用于字符替换的函数。

 

在这里我们全用到时间戳

mktime(hour,minute,second,month,day,year,[is_dst])
    其参数可以从右向左省略,任何省略的参数都会被设置成本地日期和时间的当前值。
   

参数 描述
hour 可选。规定小时。
minute 可选。规定分钟。
second 可选。规定秒。
month 可选。规定用数字表示的月。
day 可选。规定天。
year 可选。规定年。在某些系统上,合法值介于 1901 – 2038 之间。不过在 php教程 5 中已经不存在这个限制了。
is_dst 可选。如果时间在日光节约时间(dst)期间,则设置为1,否则设置为0,若未知,则设置为-1。自 5.1.0 起,is_dst 参数被废弃。因此应该使用新的时区处理特性

   
在日常生活中我们要经常比较时间的早晚,对于我们来说判断时间的大小很简单。但是时间的比较不只是单纯的数字大小的比较,因此相对来说还是比较复杂。那么在php中通过什么方式来比较两个时间的大小呢?

    要比较两个时间的大小,我们需要将时间转化为时间戳格式,然后再进行比较这是最常用的方法。常用到的函数是:strtotime()
    语法格式:strtotime(time,now)
    如果time是绝对时间,则now参数不起作用
    如果time是相对时间,则相对应的参数则对应函数就是now来提供,如果没有提供now参数,那么相对应的时间就是当前的本地时间。

实例:比较两个绝对时间的大小
代码:

<?php
$zero1=date(“y-m-d h:i:s”);
$zero2=”2010-11-29 21:07:00′;
echo “zero1的时间为:”.$zero1.”<br>”;
echo “zero2的时间为:”.$zero2.”<br>”;
if(strtotime($zero1)<strtotime($zero2)){
 echo “zero1早于zero2′;
}else{
 echo “zero2早于zero1′;
}
?>


输出结果:
zero1的时间为:2010-11-30 21:12:55
zero2的时间为:2010-11-29 21:07:00
zero2早于zero1

注:可以根据实例发散思维

    计算两个日期的差值
    奥运会倒计时,亚运会倒计时,生日倒计时这些倒计时都可以通过计算两个日期的差值来实现,同样需要用到strottime()函数。
    实现倒计时需要将两个时间的差值整数化,需要用到函数ceil()
    ceil()函数的作用是求不小于给定实数的最小整数

实例:倒计时小程序
实例代码:

<?php
$zero1=strtotime (date(“y-m-d h:i:s”)); //当前时间
$zero2=strtotime (“2011-2-03 24:00:00′);  //过年时间
$guonian=ceil(($zero2-$zero1)/86400); //60s*60min*24h
echo “离过年还有<strong>$guonian</strong>天!”;
?>


输出结果:
离过年还有66天!

strtotime()函数解析

定义和用法
strtotime() 函数将任何英文文本的日期时间描述解析为 unix 时间戳。

语法
strtotime(time,now)参数 描述
time 规定要解析的时间字符串。
now 用来计算返回值的时间戳。如果省略该参数,则使用当前时间。 

说明
该函数预期接受一个包含美国英语日期格式的字符串并尝试将其解析为 unix 时间戳(自 january 1 1970 00:00:00 gmt 起的秒数),其值相对于 now 参数给出的时间,如果没有提供此参数,则用系统当前时间

 

sscanf定义和用法及分析
sscanf() 函数根据指定的格式解析来自一个字符串的输入。

如果只向该函数传递两个参数,数据将以数组的形式返回。否则,如果传递了额外的参数,那么被解析的数据会存储在这些参数中。如果区分符的数目大于包含它们的变量的数目,则会发生错误。不过,如果区分符少于变量,则额外的变量包含 null。

语法
sscanf(string,format,arg1,arg2,arg++)参数 描述
string 必需。规定要读取的字符串。
format 必需。规定要使用的格式。
arg1 可选。存储数据的第一个变量。
arg2 可选。存储数据的第二个变量。
arg++ 可选。存储数据的第三、四个变量。依此类推。

说明
参数 format 是转换的格式,以百分比符号 ("%") 开始到转换字符结束。下面的可能的 format 值:

%% - 返回百分比符号
%b - 二进制数
%c - 依照 ascii 值的字符
%d - 带符号十进制数
%e - 可续计数法(比如 1.5e+3)
%u - 无符号十进制数
%f - 浮点数(local settings aware)
%f - 浮点数(not local settings aware)
%o - 八进制数
%s - 字符串
%x - 十六进制数(小写字母)
%x - 十六进制数(大写字母)
例子
<?php教程
$string = "age:30 weight:60kg";
sscanf($string,"age:%d weight:%dkg",$age,$weight);
// show types and values
var_dump($age,$weight);
?>输出:

int(30)
int(60)

scanf("a=%f,b=%f,c=%f",&a,&b,&c);

输入应采用如下形式

a=12,b=24,c=36
采用这种形式是为了使用户输入数据时添加必要的信息,使含义清楚,不易发生输入数据的错误。

——谭浩强,《c语言程序设计》(第2版),清华大学出版社,2008年11月,p71~72

这段文字很唬人,貌似讲的头头是道,其实愚蠢透顶。

程序是用来为用户解决问题的,而不是用来给用户添麻烦的。

任何一个合格的程序员都不会写出

scanf("a=%f,b=%f,c=%f",&a,&b,&c);
这样的代码。理由是,要求用户输入的“a=”、“b=”、“c=”以及两个“,”都毫无意义。把这句蹩脚的代码稍微更改一下,就不难发现其愚蠢。它基本上等价于

scanf("a=");

scanf("%f",&a);

scanf(",");

scanf("b=");

scanf("%f",&b);

scanf(",");

scanf("c=");

scanf("%f",&c);

其中的scanf("a=");、scanf("b=");、scanf("c=");和scanf(",");对于程序来说根本没有任何信息价值,增加这些代码的唯一效果就是给用户增加了许多不必要的麻烦。万一用户输入错误,还可以导致程序“挂掉”或出错。

因此引文不但愚蠢,而且简直是在教唆学习者自虐——程序员总是程序的第一个使用者。

那段引文应该修改为

“如果是

scanf("a=%f,b=%f,c=%f",&a,&b,&c);

输入应采用如下形式

a=12,b=24,c=36
采用这种形式是为了使用户输入数据时同时给用户添加不必要的麻烦,使含义混乱,容易发生输入数据的错误。”

对用户友好的、具有良好易用性的程序代码其实应该这样写

printf("a=");

scanf("%f",&a);

printf ("b=");

scanf("%f",&b);

printf ("c=");

scanf("%f",&c);

通过调用函数printf()给用户以提示,而不是用“scanf("a=");”这样的代码来折磨用户

参数中的数组被当成一个表的列并以行来进行排序 - 这类似 sql 的 order by 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。

 

<?php教程
$a1=array("dog","cat");
$a2=array("fido","missy");
array_multisort($a1,$a2);
print_r($a1);
print_r($a2);
?>输出:

array ( [0] => cat [1] => dog )
array ( [0] => missy [1] => fido )


例子 6. 名次排列

<?php
$grade = array("score" => array(70, 95, 70.0, 60, "70"),
               "name" => array("zhang san", "li si", "wang wu",
                               "zhao liu", "liu qi"));
array_multisort($grade["score"], sort_numeric, sort_desc,
                // 将分数作为数值,由高到低排序
                $grade["name"], sort_string, sort_asc);
                // 将名字作为字符串,由小到大排序
var_dump($grade);
?> 

上例将输出:

array(2) {
  ["score"]=>
  array(5) {
    [0]=>
    int(95)
    [1]=>
    string(2) "70"
    [2]=>
    float(70)
    [3]=>
    int(70)
    [4]=>
    int(60)
  }
  ["name"]=>
  array(5) {
    [0]=>
    string(5) "li si"
    [1]=>
    string(6) "liu qi"
    [2]=>
    string(7) "wang wu"
    [3]=>
    string(9) "zhang san"
    [4]=>
    string(8) "zhao liu"
  }
}


 

多维数组排序:

<?php
$arr = array (array (1, 2, 3, 4), array ("a", "b", "b", "d"));
array_multisort($arr[0], sort_desc, $arr[1], sort_asc);
print_r($arr);
?>
运行该例子输出:

array
(
    [0] => array
        (
            [0] => 4
            [1] => 2
            [2] => 2
            [3] => 1
        )
 
    [1] => array
        (
            [0] => d
            [1] => b
            [2] => c
            [3] => a
        )
)


array_multisort() 函数对多个数组或多维数组进行排序。

先来看一个实例,

header('location: http://www.111cn.net/');

上面是简单的调跳,我们要做永久转向怎么做呢。如下。


语法
header(string,replace,http_response_code)参数 描述
string 必需。规定要发送的报头字符串。
replace 可选。指示该报头是否替换之前的报头,或添加第二个报头。

默认是 true(替换)。false(允许相同类型的多个报头)。
 
http_response_code 可选。把 http 响应代码强制为指定的值。(php教程 4 以及更高版本可用)


其它中 http_response_code 就是我们要写的301代码了,如下.


$url = "http://www.111cn.net";
header("http/1.1 301 moved permanently");
header("location: $url");
exit();

注释:从 php 4.4 之后,该函数防止一次发送多个报头。这是对头部注入攻击的保护措施。

[!--infotagslink--]

相关文章

  • mysql_connect与mysql_pconnect的区别详解

    在mysql中我们会看到有两种常用的数据库连接模式,一种是长久连接,另一各是页面访问完之后就断了连接,下面我来分别介绍mysql_connect与mysql_pconnect的区别,有需要了解...2016-11-25
  • C#中using的三种用法

    using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using 关键字还用来创建 using 语句 定义一个范围,将在此...2020-06-25
  • C#中out与ref的区别实例解析

    这篇文章主要介绍了C#中out与ref的区别实例解析,对C#初学者有不错的学习借鉴价值,需要的朋友可以参考下...2020-06-25
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • 谈谈Jquery中的children find 的区别有哪些

    精华:find方法能找子孙,children方法只能找儿子一、Jquery中children 语法.children(selector) 说明expr是表达式,可选参数,所有选择器中的表达式都可以用在这,比如按标签名"div",按类名".class",按序号":first"等等,如果表...2015-10-21
  • iscroll.js 用法介绍

    最新版下载: http://www.csdn123.com/uploadfile/2015/0428/20150428062734485.zip 概要 iScroll 4 这个版本完全重写了iScroll这个框架的原始代码。这个项目的产生...2016-05-19
  • PS中像素大小、文档大小的区别

    在PS中像素大小、文档大小有什么区别呢,这个估计很多初学者不清楚,下面我来给大家讲解一下,希望对你有帮助。 1、像素大小 通常用于显示屏显示的图片大小的调整。菜...2016-09-14
  • C#中的try catch finally用法分析

    这篇文章主要介绍了C#中的try catch finally用法,以实例形式分析了try catch finally针对错误处理时的不同用法,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C++中cin的用法详细

    这篇文章主要介绍了C++中cin的用法详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • js replace(a,b)之替换字符串中所有指定字符的方法

    下面小编就为大家带来一篇js replace(a,b)之替换字符串中所有指定字符的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-08-24
  • C#中sleep和wait的区别分析

    这篇文章主要介绍了C#中sleep和wait的区别分析,有助于深入理解C#中线程的原理与使用技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • 示例详解react中useState的用法

    useState 通过在函数组件里调用它来给组件添加一些内部 state,React 会在重复渲染时保留这个 state,接下来通过一个示例来看看怎么使用 useState吧...2021-06-04
  • uniapp和vue的区别详解

    这篇文章主要介绍了uniapp和vue的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-10-19
  • Delphi常用关键字用法详解

    这篇文章主要介绍了Delphi常用关键字用法,包括了各个常用的关键字及其详细用法,需要的朋友可以参考下...2020-06-30
  • PHP中print_r、var_export、var_dump用法介绍

    文章详细的介绍了关于PHP中print_r、var_export、var_dump区别比较以及这几个在php不同的应用中的用法,有需要的朋友可以参考一下 可以看出print_r跟var_export都...2016-11-25
  • php中php://input的用法详细

    在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组。所以,这里主要探讨php输入流php://input。 下面的例子摘取的是wordpres...2016-11-25
  • list与push的区别

    //函数list while(list($id,$username,$password,$add_date,$mdn,$mobile,$channel,$last_date,$area,$nickname) = mysql_fetch_array($rs)){ ...2016-11-25
  • MySQL中的主键以及设置其自增的用法教程

    1、声明主键的方法: 您可以在创建表的时候就为表加上主键,如: CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name)); 也可以更新表结构时为表加上主键,如: ALTER TABLE tbl_name ADD PRIMARY KEY (in...2015-11-24
  • input框中的name和id的区别

    这篇文章主要介绍了input框中的name和id的区别介绍,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-11-22
  • C#中this的用法集锦

    本文给大家汇总介绍了C#中的几种this用法,相信大家应该有用过,但你用过几种?以下是个人总结的this几种用法,欢迎大家拍砖,废话少说,直接列出用法及相关代码。...2020-06-25