php数组、字符串

本章是需要熟记的函数,使用的时候有问题查手册

操作数组的函数

is_array()

判断一个变量是否是一个数组,返回是一个布尔型,如果是数组返回真,如果不是数组,返回假

查找一个值是否正在一个数组中,返回的是以键名
语法:$arr = array_search('3',$arr);

array_search()查找值区分大小写,不区分数据类型,如果出现同值问题,取前面第一个下标。
第三个参数如果是true则区分数据类型$arr = array_search('3',$arr,true);

操作键值的函数

array_keys()

获取数组中的所有下标,以一个索引数组的模式返回
语法:$arr2 = array_keys($arr);

获取的数组,下标从0开始依次递增

array_values()

获取数组中的所有值,以一个索引数组的模式返回
语法:$arr3 = array_values($arr);

如果值是一个数组,也同样将这个数组当成以值赋值给数组

array_combine()

将两个数组的值合并成一个数组,第一个数组是下标,第二个数组是值
语法:$arr4 = array_combine($arr1,$arr2);

返回的数据类型是一个数组。两个数组参数的元素个数必须要一一对应

in_array()

查找数组中的某一个值是否存在
语法:var_dump(in_array('a',$arr));

in_array查找是区分大小写的,并且默认不区分数据类型,如果想让他区分数据类型,将第三个参数修改为true即可;
第一个参数是需要查找的值,第二个参数是查找的数组,返回的结果是一个布尔值
而array_search返回的是一个键名

array_key_exists()

查找一个键是否在某个数组中
语法:var_dump(array_key_exists('1',$arr));

第一个参数是需要查找的下标,第二个参数是需要寻找的数组,返回的结果是一个boolean型
本身就不区分数据类型,没有第三个参数;

isset()

判断一个变量是否已经被定义,如果没有被定义或者值为null返回的结果是false
语法:var_dump(isset($arr['b']));

isset()和array_key_exists的区别,如果下标对应的值为空。isset返回的结果是false,array_key_exists返回的结果是true

合并和拆分字符、数组的函数

implode()

将一个数组里面的元素合并成一个字符串
语法:$str = implode('',$arr);

两个参数,第一个是元素值和值之间连接的符号(第一个可以不写),第二个参数是你需要遍历的数组。join()就是implode别名函数

explode()

将一个字符串拆分成一个数组
语法:$arr = explode('a',$str);

两个参数,第一个是拆分字符串的标志,第二个参数是需要拆分的字符串

语法:$arr = explode('a',$str,3);

如果第三个元素是正整数,分割成三个部分,最后一个元素会将包含剩下的所有的包含
如果第三个原始是负整数,则会将最后的3个元素抛弃,

数组的交并差

array_merge()

合并两个数组:array_merge(数组1,数组2)
语法:$arr = array_merge(range(0,9),range('a','z'));

array_merge如果合并两个数字下标的数组,会将数字重新从0进行组合。
array_merge如果合并两个字符串下标的数组,后面的值会将前面的值覆盖。
array_merge合并两个数组,先从第一个数组开始合并,然后在合并第二个数组。

array_diff()

计算数组差值
语法:array array_diff ( array $array1 , array $array2 [, array $... ] )

对比返回在 array1 中但是不在 array2 及任何其它参数数组中的值。
返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变

array_intersect()

计算数组的交集
语法:array array_intersect ( array $array1 , array $array2 [, array $ ... ] )

array_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。

函数遍历数组

回调函数是由计算机自己去调用php中的函数

array_map()

将回调函数作用到给定数组的单元上
语法:array array_map ( callable $callback , array $arr1 [, array $... ] )
语法: array_map(‘函数名’,数组名)。

1
2
3
4
//使用系统函数,调用数组
$arr=array(10,-12,46,-9,-45);
$arr2 = array_map('abs',$arr);
var_dump($arr2);
1
2
3
4
5
6
7
8
//使用自身定义的函数,调用数组
$arr=array(10,-12,46,-9,-45);
fucntion fn($num){
$num+=10;
return $num;
}
$arr2 = array_map('fn',$arr);
var_dump($arr2);
1
2
3
4
//使用匿名函数,调用数组
$arr=array(10,-12,46,-9,-45);
$arr2 = array_map(function($name){return 'hello'.$name;},$arr);
var_dump($arr2);

结果将所有数字转换为正数;

  1. array_map()返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
  2. array_map去回调我们自己定义好的函数
  3. 除了第一个参数直接写函数名的方法以外,我们也可以直接写一个匿名函数,达到回调函数的功能
  4. 如果第一个参数的值为null,则会把后面的数组的每一个值取出来进行拼接,合并成一个新的数组

array_walk()

功能类似于遍历数组,可以同时获取数组里面的值和下标

1
2
3
4
5
$arr = array('name'=>'张无忌','age'=>528,'sex'='男');
function fn($value,$key){
echo $key.'-'.$value.'<br>';
}
$arr2 = array_walk($arr,'fn');

可以分别获取下标和值,进行计算。如果函数只写一个参数,则获取的是数组里面的值。

1
2
3
$arr2 = array_walk($arr,function($value,$key){
echo $key.'->'.$value,'<br>';
})

array_walk同样支持匿名函数的用法

  • 接触最多的回调函数还是array_map(),array_walk()用的次数相对于而言,比较少。

  • array_walk第一个参数写的数组名,第二个参数写的才是调用的数组
    array_walk返回的结果只会是一个布尔型的结果,如果array_walk执行成功返回的记过就是true,如果array_walk执行失败,返回的救过就是false,他不会生成一个新的数组;

栈和队列

栈的特点就是先进后出,后进先出。
队列的特点就是先进先出,后进后出。

array_push()

第一个参数是需要放置的数组,后面的参数是需要放置的元素

1
2
3
4
$arr = array();
array_push($arr,'a');
array_push($arr,'b','c','d');
print_r($arr);

一次性可以放置多个元素

array_pop()

1
2
3
4
5
6
$arr = array();
array_push($arr,'a');
array_push($arr,'b','c','d');
array_pop($arr);
array_pop($arr);
print_r($arr);

出栈一次只能出一个元素。d和c后进的元素,先被拿出来了

返回结果:mexd,溢出的元素

array_shift()

出队列

思考:unset和arr_shift有什么区别?
答案:使用array_shift去移除一个元素,那个其他的元素位置会往前移一位,保持数据完整性;但是unset删除一个元素,下标也会被删除

array_unshift()

就是在数组的第一个位置插入一个元素。

往数组里面第一个元素的位置放置一个元素。

栈和队列的优点:栈和队列都是有效保证数据的完整性;

数组的排序

sort()

按照数值值得大小进行排序。从小到大的顺序

将原有的下标丢弃,从0开始依次递增

rsort()

按照数组的数值进行排序,从大到小的顺序。

也是将原有的下标丢弃,从0开始依次递增

asort()

按照数组的数值进行排序,从小到大排序,但是会保留下标

arsort()

按照数组的数值进行排序,从大到小排序,但是会保留下标

ksort()

按照数组的下标顺序进行排序。从小到大进行排序

krsort()

按照数组的下标顺序进行排序,从大到小进行排序

natsort()

自然排序

将字符串整体进行排序,而sort会挨个字符进行比较,然后进行排序

usort()

自定义排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$arr = array(
array('name'=>'jack','math'=>78,'age'=>56),
array('name'=>'rose','math'=>98,'age'=>14),
array('name'=>'jame','math'=>56,'age'=>67),
array('name'=>'uiste','math'=>45,'age'=>24)
);
usort($arr,function($num1,$num2){
if ($num1['age']>$num2['age']) {
return 1;
}elseif ($num1['age']<$num2['age']) {
return -1;
}else{
return 0;
}
});

echo "<pre>";
print_r($arr);
echo "</pre>";

在第一个参数小于,等于或大于第二个参数时,该比较函数必须相应地返回一个小于,等于或大于0的整数。

如果return -1则值放在前面
如果 return 1 则值放在后面
如果 return 0 则值的位置不发生变化

关于字符串的函数

[]

字符串可以理解成字符的合计。

所以,[]就是获取字符串中的某一个字符

strlen()

获取字符串的长度

获取长度的单位是字节,中文下的感叹号也被分解为三个字节;空格也在空间

trim()

去除两边的空格

rtrim()

除去右边的空格

ltrim()

去除左边的空格

strpos()

获取字符串某个字符的位置
语法:strpos($str,'b');

获取某个字符首次出现的位置。如果后面加上第三个参数,代表字符串从某个位置开始往后去寻找。如果没写第三个参数,则第三个参数默认为0

语法:strpos($str,'b',3);

参数为3,则是从字符串第4个位置开始去寻找

strrpos()

获取某个字符出现的最后一个位置
语法:var_dump(strrpo($str,'b',2));

从右往左查找,第三个参数代表最终查找到某个字符结束。找到返回下标,找不到返回false;

str_repeat()

将某个字符串重复多少次

第一个参数是需要重复的字符串,第二个参数重复的次数;

chr()

将一个数字转换成ASCII码

ord()

将一个ASCII转换成对应的数字

substr()

截取某个字符串
语法:substr($str,3);

从下标为3的字符开始,一直截取到结束

语法:substr($str,3,4);

从下标为3的字符开始,截取4个字符

语法:substr($str,3,-3);

从下标为3的字符开始截取,舍去最后三个字符

语法:substr($str,-4,2);

从右往左数4个字符开始截取,截取2个

语法:substr($str,-5,-2);

从右往左数第五个字符开始截取,截取到倒数第二位终止

strchr()

从某个字符开始截取
语法:strchr($str,'c');

从左往右第一个c开始截取到最后(区分大小写)

strstr()的功能和strchr()的功能一模一样,只不过名称不同

stristr()

也是从某个字符开始截取,但是不区分大小写

strrchr()

从某个字符最后出现的位置开始往后截取

可以非常方便的获取文件的后缀名

str_replace()

语法:str_replace(替换前的字符串,替换后的字符串,需要替换的字符串)

str_split()

分割字符串,生成一个数组

第一个参数是一个字符串,第二个参数代表以几个字节进行拆分
explode是以字符进行拆分的

str_pad()

填充字符串

四个参数组成,第一个是填充的字符串,第二个是长度,第三个是填充物,第四个是左,右,两边填充

strtolower()

将一个字符串转换成全小写

strtoupper()

将一个字符串转换成全大写

nl2br()

将\n转换成

htmlspecialchars():

将标签当成普通文本输出

urlencode()

可以将字符串进行加密

urldecode()

可以将加密好的字符串进行解码

多字符处理函数

多字符处理函数,不是php默认的开启模式,需要通过配置php.ini进行操作

extension=php_mbstring.dll

mb_strlen()

获取字符的长度

第一个参数是我们需要获取的字符串,第二个参数是选择的编码格式

mb_internal_encoding()

  • 获取当前的编码格式(不加参数)
  • 修改当前的编码模式(增加参数)

mb_strpos()

查找当前某个字符的位置

mb_substr()

截取字符

iconv()

转换格式

里面三个参数,第一个是当前的编码,第二个是转换后的编码,第三个是需要转换的字符串