Blogger Information
Blog 71
fans 1
comment 1
visits 86941
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP数组函数
小威的博客
Original
670 people have browsed it
  • 常用数组函数(一)

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

 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);

运行实例 »

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


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post