那些年我们一起用过的 PHP 函数(一)
用这个帖子记录一下 PHP 中比较常用的函数以及使用过程中需要注意的点,此贴持续更新
1.strpos() 函数
首先,我们知道 strpos() 函数是用于查找一个字符串在另一个字符串第一次出现的位置,示例如下:
<?php
2
3 echo strpos("I love php, I love php too!", "php"); ----------------------------------------------------------- 输出结果: 7
表示 "php" 这个字符串在 "I love php, I love php too!" 这个字符串中第一次出现的位置是 7
下面我们修改一下所要查找的字符串,如下:
<?php
2
3 if(strpos("I love php, I love php too!", "I")) {
4 echo "存在";
5 }else{
6 echo "不存在";
7 }
------------------------------------------------------ 输出结果: 不存在
输出结果是不存在,是因为字符串 "I" 在 "I love php, I love php too!" 字符串中第一次出现的位置是 0,所以,如果
使用 strpos() 函数判断字符串中是否存在某个字符时必须使用 "=== false" 或 "!== false",示例如下:
<?php
2
3 if(strpos("I love php, I love php too!", "I") === false) {
4 echo "不存在";
5 }else{
6 echo "存在";
7 } ------------------------------------------------------------------- 输出结果: 存在
但是 "=== false" 或 "!=== false" 并不是全部,这里还有一个坑需要填,示例如下:
<?php
2
3 if(strpos("I like php 1", 1) === false) {
4 echo "不存在";
5 }else{
6 echo "存在";
7 }
------------------------------------------------- 输出结果: 不存在
输出结果是"不存在",但是我们看到明明是存在的,这和我们的预期不一致,再仔细看一下我们发现 1 不是一个字符串,
strpos() 函数的第二个参数必须是一个字符串,如果我们不确定第二个参数的类型,我们可以使用 strval() 函数把它转换成字符串类型,
示例如下:
<?php
2
3 $str = "I like php 1";
4 $search = 1;
5
6 if(strpos($str, strval($search)) === false) {
7 echo "不存在";
8 }else{
9 echo "存在";
10 }
----------------------------------------------------- 输出结果: 存在
2.编码转换函数 mb_convert_encoding 和 iconv 区别
mb_convert_encoding 的用法:
string mb_convert_encoding(string str,string to_enconding,[,mix from encoding])
使用 mb_convert_encoding 函数,需要将 php.ini 里面的 ;extension=php_mbstring.dll 前面的分号去掉,mb_convert_encoding 函数
可以指定多种输入编码,它会根据内容自动识别,但是执行效率要比 iconv 差太多
php 还有一个编码转换函数 iconv :
string iconv ( string in_charset, string out_charset, string str )
注意:第二个参数除了指定要转换到的编码外,还可以增加两个后缀,"//IGNORE 和 //TRANSLIT" ,其中 //TRANSLIT 会自动将不能直
接转换的编码变成一个或多个相近的字符,//IGNORE 会忽略掉不能转换的字符
使用 iconv 在转换字符 "—" (ASCII码150之后的字符) 到GB2312 时会报错,如果没有 //IGNORE 这个参数所有该字符后面的字符串都无法
被保存,mb_conver_encoding 没有这个bug
一般情况下使用 iconv ,只有遇到无法确定原编码是何种编码,或 iconv 转换后无法正常显示时才使用 mb_convert_encoding 函数
3.array_keys() 函数
返回包含原数组中所有键名的一个新数组,示例如下:
<?php
$a = array("Volvo"=>"XC90","BMW"=>"X5","Toyota"=>"Highlander");
print_r(array_keys($a)); ----------------------------- 返回结果: Array
(
[0] => Volvo
[1] => BMW
[2] => Toyota
)
该函数有三个参数:
(1) 第一个参数是所要传的数组,是必填参数
(2) 第二个参数是可选值,这个参数我们可以指定键值,然后只有该键值对应的键名会被返回
(3) 第三个参数也是可选参数,true/false,和第二个参数一起使用:
true - 返回带有指定键值的键名。依赖类型,数字 5 与字符串 "5" 是不同的
false - 默认值。不依赖类型,数字 5 与字符串 "5" 是相同的
如下示例
#Example 01(使用第二个参数)
$a = array("Volvo"=>"XC90","BMW"=>"X5","Toyota"=>"Highlander");
print_r(array_keys($a,"Highlander")); -------------------------------------------- 返回结果 Array
(
[0] => Toyota
)
#Example 02(使用第三个参数false)
$a = array(10,20,30,"10");
print_r(array_keys($a,"10",false)); --------------------------------------- 返回结果 Array
(
[0] => 0
[1] => 3
)
#Exmaple 03(使用第三个参数true)
$a=array(10,20,30,"10");
print_r(array_keys($a,"10",true)); --------------------------------------- 返回结果 Array
(
[0] => 3
)
4.array_pop 和 array_shift 函数
array_shift 和 array_pop 只从数组的头或尾删除一个元素。经过阅读源码,发现这两个函数调用的都是同一个函数--_phpi_pop
来实现从数组中删除一个元素的功能。源码地址:php5->https://github.com/hoohack/read-php-src/blob/master/php-5.4/ext/standard/array.c
函数语法
array_pop 函数弹出并返回数组的最后一个单元,并将数组长度减一,如果数组 array 为空则返回 null
mixed array_pop ( array $&array )
array_shift 函数将数组开头单元移出数组并作为返回结果,将 array 长度减一并将所有数字键值从0开始计数,文字键值不变
mixed array_shift ( array &$array )
代码示例:
$arr = array('apple', 'banana', 'cat');
$val = array_pop($arr); // 返回值 cat $arr = array('apple', 'banana', 'cat');
$val = array_shift($arr); // 返回值 apple
两个函数都是调用了 _phpi_pop 函数,区别不一样的是调用 _phpi_pop 函数时传递的第二个参数 off_the_end 不同,如果 off_the_end
是 1 则是 array_pop ,如果 off_the_end 是 0 则是 array_shift ,我们来看一下 _phpi_pop 这个函数的执行步骤
1.如果数组长度为0,则返回null
2.根据 off_the_end 参数的值移动内部指针指向需要删除的数组元素
3.设置返回值为第二步指针指向的元素
4.从数组中移出第一个或最后一个值并将长度减一
5.如果是 array_shift 操作,则需要重置数组下标,将数字下标改为0开始计数,文字键值不不变,否则需要修改下一个数字索引的位置
6.重置array指针
5.preg_split 函数
我们知道使用 explode 函数可以将字符串拆分成数组,但是一般这样字符串的字符之间的分隔符是一样的,如何拆分含有多个分隔符的字符串,
我们先来看如何解决:
# Way01 使用 preg_split 函数(使用正则表达式)
// 含有多种分隔符的字符串
$string="php教程#php入门:教程#字符串:多分隔符#字符串:拆分#数组";
$arr = preg_split("/(#|:)/",$string);
print_r($arr); ------------------------------------------- 输出结果 Array
(
[0] => php教程
[1] => php入门
[2] => 教程
[3] => 字符串
[4] => 多分隔符
[5] => 字符串
[6] => 拆分
[7] => 数组
)
# Way02
先将分隔符转换成统一字符使用 str_replace 函数,再使用 explode 函数分割,代码如下:
$string="php教程#php入门:教程#字符串:多分隔符#字符串:拆分|数组";
$arr = explode("#",str_replace(array(':','|'),'#',$string));
print_r($arr); ----------------------------------------------------------------- 输出结果 Array
(
[0] => php教程
[1] => php入门
[2] => 教程
[3] => 字符串
[4] => 多分隔符
[5] => 字符串
[6] => 拆分
[7] => 数组
)
php 中正则表达式分割函数有两个:preg_split、split 使用最多的是 preg_split 函数
preg_split() 函数用于正则表达式分割函数
语法如下:
array preg_split( string pattern, string subject [, int limit [, int flags]] )
参数说明:
参数 | 说明 |
pattern | 正则表达式 |
subject | 需要匹配分割的对象 |
limit | 可选 |
flags | 可选 |
limit、flags 两个参数都是可选参数,就目前所遇见的情况使用的并不是太多,所以在这里就不在做详细介绍,感兴趣的可以深入了解一下,下面我们
通过示例看一下:
$str = "php mysql,apache ajax";
$keywords = preg_split("/[\s,]+/", $str);
print_r($keywords); ----------------------------- 输出结果 Array
(
[0] => php
[1] => mysql
[2] => apache
[3] => ajax
)
6. array_chunk 函数
定义和用法:
array_chunk(array,size,preserve_key)
函数把数组分割成新的数组块,其中每个数组的元素个数由size决定,最后一个数组的元素个数可能会少几个 第三个参数是一个可选参数,是一个bool值,他指定新数组的元素是否有和原数组相同的键(用于关联数组),还是从0开始的新数字键(用于索引数组),默认分配新的键
实例01:把数组分割成带有两个元素的数组
<?php
$cars=array("Volvo","BMW","Toyota","Honda","Mercedes","Opel");
print_r(array_chunk($cars,2)); ------------------------------------------------------------------------- 输出结果 Array
(
[0] => Array
(
[0] => Volvo
[1] => BMW
) [1] => Array
(
[0] => Toyota
[1] => Honda
) [2] => Array
(
[0] => Mercedes
[1] => Opel
) )
实例02:把数组分割成带有两个元素的数组,并保留原始数组中的键名
<?php
$age=array("Bill"=>"60","Steve"=>"56","Mark"=>"31","David"=>"35");
print_r(array_chunk($age,2,true)); --------------------------------------------------------------------------------- 输出结果 Array
(
[0] => Array
(
[Bill] => 60
[Steve] => 56
) [1] => Array
(
[Mark] => 31
[David] => 35
) )
7. php_uname 函数
php_uname([string $mode = "a"]) 函数--返回运行 php 系统的有关信息,和 phpinfo() 最顶端上输出的是同一个字符串
参数:
mode 是单个字符串,用于定义要返回什么信息
‘a’:此为默认。包含序列 “s n r v m” 里的所有模式。
’s’:操作系统名称。例如: FreeBSD。
‘n’:主机名。例如: localhost.example.com。
‘r’:版本名称,例如: 5.1.2-RELEASE。
‘v’:版本信息。操作系统之间有很大的不同。
‘m’:机器类型。例如:i386。
实例:
<?php
$sys_info = php_uname()."\n"; if(strtolower(substr($sys_info,0,5)) == 'linux') {
echo "this is a linux system.\n";
} echo "Host:".php_uname("n")."\n"; --------------------------------------------------------- 输出结果 this is a linux system.
Host:VM_81_181_centos
8. mktime 函数
作用:取得指定日期的时间戳
语法:
int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
注意最后一个参数 $is_dst 在 5.1.0 版本起被废弃掉了
说明:
根据给出的参数返回 UNIX 时间戳,时间戳是一个长整数,包含了从 UNIX 纪元(GMT)到给定时间的秒数,参数从右到左省略,
任何省略的参数会被设置为本地日期时间的当前值,参数顺序:时-分-秒-月-日-年
示例:
<?php
echo mktime(0,0,0,03,11,2019);
echo "<br />";
echo date("Y-m-d H:i:s",mktime(0,0,0,03,11,2019)); ----------------------------------------------------------- 输出结果 2019-03-11 00:00:00
1552262400
试一下从右到左省略,如下示例:
<?php
echo date("Y-m-d");
echo "<br />";
echo mktime(0,0,0);
echo "<br />";
echo date("Y-m-d H:i:s",mktime(0,0,0)); ---------------------------------------------- 输出结果: 1552262400
2019-03-11 00:00:00
2019-03-11
从上面的输出结果中可以知道,虽然省略了后面的参数,但是函数自动启用了当前日期补齐
现在,我们什么参数都不传,来看一下效果:
<?php
ini_set("display_errors",1);
echo date("Y-m-d H:i:s");
echo "<br />";
echo mktime(0);
echo "<br />";
echo date("Y-m-d H:i:s",mktime()); ---------------------------------------- 输出结果 1552236147
2019-03-11 20:42:27
2019-03-11 20:42:27
报错信息:
Strict standards: mktime(): You should be using the time() function instead in E:\wamp64\www\demo.php on line 7
意思是:我们可以使用 time() 函数来替代当前的函数,说明当前 mktime() 不传递任何参数的时候和time()效果是一样的
9.strrev() 函数反转字符串
定义与语法:
php 中,strrev() 函数用于反转字符串,就是将字符串从右到左反过来形成新的字符串,函数返回反转后的新字符串,原字符串保持不变
语法格式:
$newstr = strrev(string);
如下示例:
<?php
$string = "I Love PHP";
$newstr = strrev($string);
echo $newstr; ----------------------------- 输出结果 PHP evoL I
10. array_reverse 函数
定义和用法:
array_reverse() 函数以相反的元素顺序返回数组
说明:
array_reverse() 函数将原数组中的元素顺序翻转,创建新的数组并返回
如果第二个参数指定为 true,则保持原数组元素的键名不变
语法:
array_reverse(array,preserve) preserve 参数默认为false
示例1:
<?php
$a=array("a"=>"Volvo","b"=>"BMW","c"=>"Toyota");
print_r(array_reverse($a)); ------------------------------------------------------------- 输出结果 Array
(
[c] => Toyota
[b] => BMW
[a] => Volvo
)
示例2:
<?php
$a=array("Volvo","XC90",array("BMW","Toyota"));
$reverse = array_reverse($a);
$preverse = array_reverse($as,true);
print_r($a);
print_r($reverse);
print_r($preverse); ---------------------------------------------------------- 输出结果 Array
(
[0] => Volvo
[1] => XC90
[2] => Array
(
[0] => BMW
[1] => Toyota
) )
Array
(
[0] => Array
(
[0] => BMW
[1] => Toyota
) [1] => XC90
[2] => Volvo
)
Array
(
[2] => Array
(
[0] => BMW
[1] => Toyota
) [1] => XC90
[0] => Volvo
)
11. array_splice() 和 array_slice() 函数
array_splice()函数
参数: array_splice(array,offset,length,array)
参数列表:
array 必需。规定数组。
offset 必需。数值。如果 offset 为正,则从输入数组中该值指定的偏移量开始移除。如果 offset 为负,则从输入数组末尾倒数该值指定的偏移量开始移除。
length 可选。数值。如果省略该参数,则移除数组中从 offset 到 结尾的所有部分。如果指定了 length 并且为正值,则移除这么多元素。如果指定了 length 且为负值,则移除从 offset 到数组末尾倒数 length 为止中间所有的元素。
array 被移除的元素由此数组中的元素替代。如果没有移除任何值,则此数组中的元素将插入到指定位置。
示例1:
$var=array('cat','dog','flash','pig','monkey');
$var2=array('Horse','bird'); array_splice($var,0,2,$var2);
print_r($var); -------------------------------------------------- 输出结果 Array
(
[0] => Horse
[1] => bird
[2] => flash
[3] => pig
[4] => monkey
)
原数组中索引值为 0 和 1 的元素被删除,将数组 var2 插入到被删除元素的位置,原数组被改变
还是上面那个例子,我们打印 print_r(array_splice($var,0,2,$var2)),打印结果如下:
Array
(
[0] => cat
[1] => dog
)
输出被删除元素
array_splice 还有另外一个作用,删除数组中指定的元素,如下:
<?php
$var=array('cat','dog','flash','pig','monkey');
array_splice($var,1,1);
print_r($var); --------------------------------------------------- 输出结果 Array
(
[0] => cat
[1] => flash
[2] => pig
[3] => monkey
)
删除数组中的元素,还可以使用 unset 函数,如下所示:
<?php
$var=array('cat','dog','flash','pig','monkey');
unset($var[1]);
print_r($var); ----------------------------------------------------- 输出结果 Array
(
[0] => cat
[2] => flash
[3] => pig
[4] => monkey
)
我们发现使用 array_splice 删除指定元素后,数组会重建索引而使用 unset 删除指定元素后,原数组中的元素索引不变
array_slice() 函数
定义与用法:array_slice() 函数根据条件在数组中取一段值,并返回
注意:如果数组中有字符串键,则返回的数组保留键名
语法:array_slice(array,start,length,preserve)
示例1(取值):
<?php
$a=array('red','green','blue','yellow','brown');
print_r(array_slice($a,1)); ---------------------------------------------------- 输出结果 Array
(
[0] => green
[1] => blue
[2] => yellow
[3] => brown
)
实例2(取值,重置键值):
<?php
$a=array('red','green','blue','yellow','brown');
print_r(array_slice($a,1,2)); -------------------------------------------------- 输出结果 Array
(
[0] => green
[1] => blue
)
示例3(取值,保留键值):
<?php
$a=array('red','green','blue','yellow','brown');
print_r(array_slice($a,1,2,true)); -------------------------------------------------- 输出结果 Array
(
[1] => green
[2] => blue
)
示例4(有字符串键,保留键名):
<?php
$b=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow","e"=>"brown");
print_r(array_slice($b,1)); -------------------------------------------------- 输出结果 Array
(
[b] => green
[c] => blue
[d] => yellow
[e] => brown
)
示例5(start为负数):
<?php
$a=array('red','green','blue','yellow','brown');
print_r(array_slice($a,-2)); --------------------------------------------------- 输出结果 Array
(
[0] => yellow
[1] => brown
)
start 为负数表示从数组的倒数某个元素开始,上面的例子中表示从数组的第二个元素开始
示例6(start,length均为负数):
<?php
$a=array('red','green','blue','yellow','brown');
print_r(array_slice($a,-3,-1)); --------------------------------------------------- 输出结果 Array
(
[0] => blue
[1] => yellow
)
length 为 -1 表示在距离数组末端为 1 长度地方终止取出
12 parse_str() 函数
定义和用法
parse_str() 函数把查询字符串解析到变量中
语法
parse_str(string,array)
参数 | 描述 |
string | 必需。规定需要解析的字符串 |
array | 可选。规定存储变量的数组名。该参数指示变量存储到数组中。 |
提示和注释
注释:如果未设置 array 参数,由该函数设置的变量覆盖已有同名变量
#Example 01 没有设置 array 参数
<?php
// 未指定 array 参数 则parse_str函数设置的变量名可能会覆盖已有的变量名
parse_str("name=Bill&age=18");
echo $name."<br />";
echo $age;
#Example 02 设置 array 参数
<?php
// 未指定 array 参数 则parse_str函数设置的变量名可能会覆盖已有的变量名
parse_str("name=Bill&age=18",$myArray);
print_r($myArray);
那些年我们一起用过的 PHP 函数(一)的更多相关文章
- 那些年我们一起用过的Hybrid App
Hybrid App现状分析 Web App 毫无疑问Web App就是成本最低,最快速地解决方案了.尤其是近两年非常流行的响应式设计,Web App市场提供了非常好的实践场地.最近典型的Web Ap ...
- python学习交流 - 匿名函数
匿名函数 匿名函数是一个很有特色的定义函数的功能.在实际使用的过程,用户有时不得不为一些一行代码即可实现的功能来定义一个函数,例如像map, max, filter等内置函数的key参数只能接收可调用 ...
- python函数及算法
算法二分法 二分算法图 什么是算法? 算法是高效解决问题的办法. 需求:有一个按照从小到大顺序排列的数字列表,查找某一个数字 # 定义一个无序的列表 nums = [3,4,5,67,8,9,12 ...
- DBA常用SQL之数据库基础信息
第一部分: 1. 查看oracle最大连接数 sql>show parameter processes #最大连接数 2. 修改最大连接数 sql>alter system set pro ...
- JavaScript设计模式之构造器、模块和原型
JavaScript面向对象 JavaScript是一种无类语言,但可以使用函数来模拟,这就涉及到设计模式.模式是一种已经验证过的可复用的解决方案,可用于解决软件设计中遇到的常见的问题,通常将这些解决 ...
- Unix/Linux进程间通信
一,Linux下进程间通信的几种主要手段简介: 1,管道(Pipe)及有名管道(named pipe) 管道可用于具有亲缘关系进程间的通信 有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功 ...
- 转:面对一个全新的环境,作为一个Oracle DBA,首先应该了解什么
转载:面对一个全新的环境,作为一个Oracle DBA,首先应该了解什么 由于时间比较久了,找不到原文章的链接,先贴上内容供大家参考 在这里,不谈那些大的方面,比如了解整个IT环境整体情况,假设你已经 ...
- cocos2D-X LUA 常用功能封装和工作经验的一些解决方案
--[[ Packaging_KernelEngine.h 文件说明:所有对象在建立时位置是优先的,传入位置参数必须cc.p(X,Y) CurObj:表示要传入当前的对象 将3.10 lua api ...
- python中map()和reduce()的使用
map() 会根据提供的函数对指定序列做映射.map(function, iterable, ...)Python 3.x 返回迭代器.print(map()) 返回迭代器地址一般和list一起用 才 ...
随机推荐
- 【转】ETL讲解(很详细!!!)
ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析依据. ETL是BI项目重要的一个环节. 通常情况下,在 ...
- c# 控件的基类——Control
控件的基类用于Windows窗体应用的控件都派生自Control类,并继承了许多通用成员,这些成员都是平时使用控件的过程中最常用的. Name:控件实例的名字,通常通过“属性”窗口设置,控件实例名称变 ...
- STM32 一个定时器产生4路 独立调频率,占中比可调,脉冲个数可以统计。
实现这个功能,基本原理是利用STM32 的输出比较功能. 1.其它设置就是普通定时器的设置这里开启,四个输出比较中断,和一个更新中断, 更新中断这里不需要开也可以达到目的,我这里开启是做其它的用处的. ...
- 转:三值逻辑与NULL的处理方式
来自:<Microsoft SQL SERVER 2008技术内幕 T-SQL查询>P7 在SQL中谓词(逻辑表达式)的可能值为TRUE.FALSE和UNKNOWN.这就是所谓的三值逻辑, ...
- Codeforce 287A - IQ Test (模拟)
In the city of Ultima Thule job applicants are often offered an IQ test. The test is as follows: the ...
- AURO OtoSys IM100 vs Lonsdor K518ISE: which better?
Comparison: AURO OtoSys IM100 and Lonsdor K518ISE It’s aimed to help make a purchase of decent auto ...
- 使用BenchmarkSQL测试PostgreSQL
BenchmarkSQL是一款经典的开源数据库测试工具,内嵌了TPCC测试脚本,可以对EnterpriseDB.PostgreSQL.MySQL.Oracle以及SQL Server等数据库直接进行测 ...
- vivado 连接不上板子 There is no current hw_target
前情提要: vivado连接板子点击auto connect报错 [Labtoolstcl 44-469] There is no current hw_target. 处理步骤: 首先排除硬件问题, ...
- 小程序 canvas实现图片预览,图片保存
wxml 代码: <view class="result-page"> <canvas bindtap="previewImage" canv ...
- python的zipfile、tarfile模块
zipfile.tarfile的用法 先占个位置,后续再实际操作和补充 参考 https://www.cnblogs.com/MnCu8261/p/5494807.html