博客列表 >PHP数组函数

PHP数组函数

小威的博客
小威的博客原创
2018年06月06日 08:12:39662浏览
  • 常用数组函数(一)

函数主要要搞清楚以下几点?

 1. 功能:能做什么?   2. 场景: 用在哪里?   3. 参数: 必选与可选的  4. 返回值: 类型与数量

 一、键与值的操作(6个)

 * 1. in_array(value, array): val是否在array中,返回布尔值

 * 2. array_key_exists(key,array):key是否在array中,返回布尔值

 * 3. array_values(array): 以索引方式返回array值部分

 * 4. array_keys(array[,value]): 以索引方式返回array键部分,还可返回指定值的键

 * 5. array_search(value, array): 以字符串方式返回指定值的键

 * 6. array_filp(array):键值对调

二、数组内部指针(巡航)操作(8个)

 * 1. key(array):返回当前元素的键 

 * 2. current(array):当前元素的值,pos()为同名函数

 * 3. next(array):指针下移,指向下一个元素,返回当前值

 * 4. reset(array):指针复位,指向第一个元素,并返回它的值

 * 5. end(array):指针移动最后一个元素上

 * 6. prev(array):指针向前移动一位,并返回当前元素的值

 * 7. each(array):返回当前元素的键值的索引与关联描述的数组,并自动下移指针

 * 8. list($a,$b,...):将索引数组中的值,赋值给一组变量

<?php
echo '<pre>';
$user = ['id'=>5,'name'=>'peter','gender'=>'male','age'=>30];
print_r($user); //查看数组
echo '<hr color="red">';

一.数组中的键与值的常用操作函数

//1. in_array(value, array): val是否在array中,返回布尔值

echo in_array('Peter Zhu',$user) ? '存在<br>' : '不存在<br>';

//2. array_key_exists(key,array):key是否在array中,返回布尔值

echo array_key_exists('name',$user) ? '存在<br>' : '不存在<br>';

//3.array_values(array): 以索引方式返回array值部分

print_r(array_values($user));

//4.array_keys(array[,value]): 以索引方式返回array键部分

print_r(array_keys($user));

//4-1.array_keys(array[,value]): 以索引方式返回array键部分,还可返回指定值的键

print_r(array_keys($user,'male'));

//5. array_search(value, array): 以字符串方式返回指定值的键

print_r(array_search('peter', $user));

//6. array_filp(array):键值对调

print_r(array_flip($user));

二、数组内部指针(巡航)操作

//count(array)当前数组的元素数量

echo count($user),'<br>';

 //当前指针位指向第一个元素

 //1.key(array):返回当前元素的键   

echo key($user),'<br>';

 //2.current(array):当前元素的值,pos()为同名函数  

 echo  current($user), '<br>';

 //3.next(array):指针下移,指向下一个元素

 next($user);

 //查看当前元素的键值

 echo key($user),'<br>';
 echo  current($user), '<br>';

//next(array)除将指针下移外,还可以返回当前元素的值

var_dump(next($user)); 
 echo key($user),'<br>';
 echo  current($user), '<br>';

 //继续向下遍历,发现next(array)返回false,说明遍历结束

var_dump(next($user));

//已到结尾无数据,不会再有输出

 echo key($user),'<br>';
 echo  current($user), '<br>';

//4.reset(array):指针复位,指向第一个元素,并返回它的值

reset($user);

//除复位外,还可返回第一个元素的值

// var_dump(reset($user));  
echo key($user),'<br>';
echo  current($user), '<br>';

//5. end(array):指针移动最后一个元素上

end($user);

// var_dump(end($user));  //也能返回当前元素的值

echo key($user),'<br>';
echo  current($user), '<br>';

//6. prev(array):指针向前移动一位,并返回当前元素的值

prev($user);
echo key($user),'<br>';
echo  current($user), '<br>';

//7. each(array):返回当前元素的键值的索引与关联描述的数组,并自动下移指针

 * 返回四个元素的数组:

 * 2个索引元素, [0]是键,[1]是值

 * 2个关联元素, [key]是键, [value]是值

@print_r(each($user));

//注意:因执行效率的问题,这个函数在php7中已经废弃

//8. list($a,$b,...):将索引数组中的值,赋值给一组变量

reset($user);  //复位指针

 * 执行的操作:

 * 1.each($user): 获取当前元素的索引部分

 * 2.list($key, $value): [0]的值赋给变量$key, [1]的值赋给变量$value

 * 3.数组$user指针自动下移

list($key, $value) = each($user);
echo $key,'=>'.$value,'<br>';

//重复调用

list($key, $value) = each($user);
echo $key,'=>'.$value,'<br>';

//非常适合用循环来实现

echo '<hr color="blue">';
reset($user);
while(list($key, $value) = each($user)) {
echo $key,'=>'.$value,'<br>';
}
  • 常用数组函数(二)

数组的堆栈操作:元素的添加与删除只允许在数组的一端进行

一、尾部

 1. array_push(array, value1[,value2...):入栈,返回新数组数量

 2. array_pop(array):出栈,弹出最后一个元素,数组长度减1

二、头部

 1. array_unshift(array,value1[,value2...):入栈,返回新数组数量

 2. array_shift(array):出栈,弹出头部第一个元素,数组长度减1

数组的队列操作:元素的添加与删除允许在二端进行

一、尾部入队,头部出队

 1. array_push(array, value1[,value2...):入队,返回新数组数量

 2. array_shift(array):出队,弹出头部第一个元素,数组长度减1

二、头部入队,尾部出队

 1. array_unshift(array,value1[,value2...):入队,返回新数组数量

  2. array_pop(array):出队,弹出最后一个元素,数组长度减1

 * 注意:

 * 1. 添加的元素总是以索引元素方式出现,并且可以同时添加多个

 * 2. 删除只能一次弹出一个元素

 * 3. 增删操作都会引起数组指针的重置操作reset()

echo '<pre>';
$user = ['id'=>5,'name'=>'peter','gender'=>'male','age'=>30];
print_r($user); //查看数组
echo '<hr color="red">';

第一、模拟堆栈操作:元素增删仅允许在一端进行

1. array_push(array, value1[,value2...):尾部入栈,返回新数组数量

echo array_push($user, 'php中文网','www.php.cn'),'<br>';
print_r($user); //查看新成的数组

2. array_pop(array):尾部出栈,弹出最后一个元素,数组长度减1

echo array_pop($user),'<br>';
print_r($user); //查看新成的数组

//再从尾部弹出一个元素,已经恢复到原始状态了

echo array_pop($user),'<br>';
print_r($user); //查看新成的数组

3. array_unshift(array,value1[,value2...):头部入栈,返回新数组数量

echo array_unshift($user, 'php中文网','www.php.cn'),'<br>';
print_r($user); //查看新成的数组

4. array_shift(array):头部出栈,弹出头部第一个元素,数组长度减1

echo array_shift($user),'<br>';
print_r($user); //查看新成的数组

第二: 模拟队列操作: 增删必须在二端进行,不允许在同一端完成

1. array_push(array, value1[,value2...):尾部入队,返回新数组数量

echo array_push($user, 'php中文网','www.php.cn'),'<br>';
print_r($user); //查看新成的数组

 2. array_shift(array):头部出队,弹出头部第一个元素,数组长度减1

echo array_shift($user),'<br>';  //出队的id=5这个元素,当然返回的只有值5
print_r($user); //查看新成的数组

 3. array_unshift(array,value1[,value2...):头部入队,返回新数组数量

echo array_unshift($user, '华为','小米'),'<br>';
print_r($user); //查看新成的数组

 4. array_pop(array):尾部出队,弹出最后一个元素,数组长度减1

echo array_pop($user),'<br>';
print_r($user); //查看新成的数组
  • 常用数组函数(三)

一、分割与合并

 1.分割:array_chunk($arr,$num,[true]):$num每组元素数量,true保持原索引

 2.合并:array_merge($arr1,$arr2,...);同名关联键名会自动覆盖,索引会重新排列自动累加

二、取出部分元素

 1.array_slice($arr, $offset, $length, true):从指定位置取出指定数量的元素,true不重置索引 

三、删除或替换部分元素

 array_splice(&input,$offset [,$length=count($input) [,$replacement = array()]])

 从指定位置起删除元素,或者用新数组元素进行替换

echo '<pre>';

1.分割:array_chunk($arr,$num,[true]):$num每组元素数量,true保持原索引

$arr = [3,5,10,4,'a'=>'中国','php',39,'mysql','java',true,[100,200,300]];

//每3个一组进行分割,保持原索引

print_r(array_chunk($arr,3,true));

 2.合并:array_merge($arr1,$arr2,...);

$arr1 = ['name'=>'peter','course'=>'php','grade'=>60, 5=>'jQuery'];
$arr2 = ['name'=>'朱老师','sex'=>'男','grade'=>90,'job'=>'lecturer', 5=>'php'];

//同名关联键名会自动覆盖,索引键名会重新排列自动累加,非常适合用户自定义配置文件更新系统配置

$arr1=array_merge($arr1, $arr2);//合并后再更新第一个数组
print_r($arr1); //查看合并后的数组,常用于配置文件更新操作

3.array_slice($arr, $offset, $length, true):从指定位置取出指定数量的元素,true不重置数字索引

$arr2 = ['name'=>'朱老师','sex'=>'男','grade'=>90,'job'=>'lecturer', 5=>'php'];
print_r(array_slice($arr2,2,4)); //返回取出的元素组成的数组
print_r(array_slice($arr2,2,4,true)); //true: 不重置数字索引

4.array_splice(&input,$offset):删除或替换部分元素

$city = ['北京', '上海', '广州', '深圳', '重庆', '天津'];
//只保留前2个元素,要从索引为2位置:广州开始删除
print_r(array_splice($city, 2)); //返回删除
print_r($city);  //查看原数据,发现只有前二个元素啦

$city = ['北京', '上海', '广州', '深圳', '重庆', '天津'];
//长度为负数,则指从负数到起始点之间的元素,此例-1是天津,2,-1指广州到重庆之间的数据
print_r(array_splice($city, 2,-1)); 
print_r($city);  //查看原数据,只前二个北京上海和最后一个天津

$city = ['北京', '上海', '广州', '深圳', '重庆', '天津'];
print_r(array_splice($city, -2, 1, ['合肥', '南京'])); //返回删除的重庆
print_r($city);  //查看原数据,重庆的位置由合肥,南京代替
  • 常用数组函数(四)

一.正序:associate(关联的), key(键)

1.sort(&$arr,$flag):正序且键名重置,按值升序排列,键名按索引方式重置

  sort($arr, SORT_REGULAR);  //忽略类型,按类型分组,仅在分组中对同类型数据进行排序

  sort($arr, SORT_NUMERIC);  //全部视为数值类型,字母全转为0,true转为1,

  sort($arr, SORT_STRING);   //全部视为字符类型,因为数字的ASCII码要小于字母,所有排在前面

  sort($arr, SORT_NATURAL);  //自然排序,与SORT_STRING结果一致

  sort($arr, SORT_FLAG_CASE); //忽略大小写,PHP5.4+以上支持

2.asort(&$arr,$flag):正序且键名保留,按值升序排列,键名保留与值的对应

  asort($arr); ==  asort($arr, SORT_REGULAR);  //忽略类型,但是键值对应关系得到了保留

3.ksort(&$arr,$flag):键名正序排列,按键名升序排列,适合于关联数组,键值对应关系不变

  ksort($arr);  //因为忽略了类型,5与其它键名类型不同,所以在最后面

  ksort($arr,SORT_STRING); //全部视为字符类型,5的ASCII码在普通字母之前

  ksort($arr,SORT_NUMERIC); //全部视为数值,则字母全转为0,5就是排到了最后面';


二.反序:reversal 反转,函数前添加一个r即可

4.rsort(&$arr):数组反转,忽略原键名,对数组逆向排序

  rsort($arr); //忽略类型分组排序,对数组进行逆向排序并保持索引关系

5.arsort(&$arr):数组反转,保留键名

  arsort($arr, SORT_STRING); //键值对应关系不变,反转是指由大到小,所以ASCII小的数字字符排到了后面

6. krsort(&$arr): 键名反转排序,对数组按照键名逆向排序

   krsort($arr, SORT_STRING); //键名全部视为字符类型,按字母表逆序排列键名';


三.自定义回调函数进行排序: usort(&$arr, functoin($a, $b){ #code })注意: 仅对值进行排序,忽略键名(即会重置键名)

7. usort(&$arr, callback()): 用户自定义排序方式','

实例

<?php
echo '实例:','<br>';
$NAN = [6,8,10,20,5,70,30,60,22,55,44,77,88,24,98];
echo '按小至大排列数组','<br>';
usort($NAN,function($a, $b){
	$NAN = $a - $b;
	if ($NAN == 0) {
		return 0;
	} else if ($NAN >0) {
		return true;
	} else {
		return false;
	}
});

print_r($NAN);
echo '按大至小排列数组','<br>';
usort($NAN,function($a, $b){
	$NAN = $a - $b;
	if ($NAN == 0) {
		return 0;
	} else if ($NAN <0) {
		return true;
	} else {
		return false;
	}
});

print_r($NAN);

运行实例 »

点击 "运行实例" 按钮查看在线实例


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议