博客列表 >0417php数组的操作

0417php数组的操作

田亢的博客
田亢的博客原创
2018年04月18日 19:52:36590浏览

一、在 PHP 中, array() 函数用于创建数组

在PHP中,有三种数组类型

1、索引数组 -带有数组索引的数组

2、关联数组-带有指定键的数组

3、多维数组-包含一个或多个数组的数组

PHP索引数组

有两种创建索引数组的方法,索引是自动分配的(索引从0开始)

$cars=array("Volvo","BMW","SAAB");

或者也可以手动分配索引

$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="SAAB";

二、弄清楚了PHP中数组的创建,看一下数组中常用的函数

 

实例

<?php

$user = ['id'=>5,'name'=>'peter','gender'=>'male','age'=>30];

//1.in_array() 函数搜索数组中是否存在指定的值。返回布尔值
echo in_array('Peter Zhu',$user) ? '存在<br>' : '不存在<br>';  //不存在
//2. array_key_exists(key,array) 函数检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false
echo array_key_exists('name',$user) ? '存在<br>' : '不存在<br>'; //存在

//3.array_values(array): 以索引方式返回array值部分,被返回的数组将使用数值键,从 0 开始并以 1 递增
print_r(array_values($user)); 
/*
输出:
Array
(
    [0] => 5
    [1] => peter
    [2] => male
    [3] => 30
)
*/
//4.array_keys(array[,value]): 以索引方式返回array键部分,函数返回包含数组中所有键名的一个新数组,如果提供了第二个参数,则只返回键值为该值的键名。
print_r(array_keys($user));

/*
输出:
Array
(
    [0] => id
    [1] => name
    [2] => gender
    [3] => age
)

*/
//4-1.array_keys(array[,value]): 以索引方式返回array键部分,还可返回指定值的键
print_r(array_keys($user,'male'));
/*输出 Array
(
    [0] => gender
)
*/

//5. array_search(value, array): 以字符串方式返回指定值的键,函数在数组中搜索某个键值,并返回对应的键名

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


//6. array_filp(array):键值对调
print_r(array_flip($user));
/*输出:
Array
(
    [5] => id
    [peter] => name
    [male] => gender
    [30] => age
)
*/

运行实例 »

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

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

实例

<?php

$user = ['id'=>5,'name'=>'peter','gender'=>'male','age'=>30];

//count(array)当前数组的元素数量
echo count($user),'<br>'; //4
//1.key(array):返回当前元素的键   
echo key($user),'<br>';//id  注意数组的当前指针指向第一个元素
//2.current(array):返回数组中的当前元素的值,pos()为同名函数  
echo  current($user), '<br>'; //5
//3.next(array):指针下移,指向下一个元素,函数将内部指针指向数组中的下一个元素,并输出
next($user);
//4.reset(array):指针复位,指向第一个元素,并返回它的值
reset($user);
//5. end(array):指针移动最后一个元素上
end($user);
echo key($user),'<br>';//age
echo  current($user), '<br>';//30

//6. prev(array):指针向前移动一位,并返回当前元素的值
prev($user);
echo key($user),'<br>';//gender
echo  current($user), '<br>';//male
//7. each(array):返回当前元素的键值的索引与关联描述的数组,并自动下移指针,
//该元素的键名和键值会被返回带有四个元素的数组中。
//两个元素(1 和 Value)包含键值,两个元素(0 和 Key)包含键名。
@print_r(each($user));  
//8. list($a,$b,...):将索引数组中的值,赋值给一组变量
$my_array = array("Dog","Cat","Horse");

list($a, $b, $c) = $my_array;
echo "I have several animals, a $a, a $b and a $c.";// I have several animals, a Dog, a Cat and a Horse.

运行实例 »

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

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


实例

<?php

$user = ['id'=>5,'name'=>'peter','gender'=>'male','age'=>30];
print_r($user); //查看数组
//1. array_push(array, value1[,value2...):尾部入栈,返回新数组数量
echo array_push($user, 'php中文网','www.php.cn'),'<br>'; //6

print_r($user); //查看新成的数组
/*
输出
Array
(
    [id] => 5
    [name] => peter
    [gender] => male
    [age] => 30
    [0] => php中文网
    [1] => www.php.cn
)
*/

//2. array_pop(array):尾部出栈,数删除数组中的最后一个元素,数组长度减1
echo array_pop($user),'<br>';//www.php.cn


//3. array_unshift(array,value1[,value2...):头部入栈,返回新数组数量
echo array_unshift($user, 'php中文网','www.php.cn'),'<br>';//6
print_r($user); //查看新成的数组
/*
Array
(
    [0] => php中文网
    [1] => www.php.cn
    [id] => 5
    [name] => peter
    [gender] => male
    [age] => 30
)
*/
//4. array_shift(array):头部出栈,弹出头部第一个元素,数组长度减1
echo array_shift($user),'<br>';//php中文网
print_r($user); //查看新成的数组
/*
Array
(
    [0] => www.php.cn
    [id] => 5
    [name] => peter
    [gender] => male
    [age] => 30
)
*/

运行实例 »

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

分割与合并、取出部分元素、删除或替换部分元素

实例

<?php

//1.分割:array_chunk($arr,$num,[true]):$num每组元素数量,true保持原索引
$arr = [3,5,10,4,'a'=>'中国','php',39,'mysql','java',true,[100,200,300]];
 print_r(array_chunk($arr,3,false));
// 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)); //返回删除

运行实例 »

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

数组的遍历

 1. foreach($arr as $key => $value) {}
 2. 原理:将数组$arr按键值对方式依次取出到$key=>$value中,逐个处理,类似于回调
 3. 如果只对值处理,可以省略$key: foreach($arr as $value) {}
 4.数组,当然也适用于索引数组

实例

<?php
//用for循环来实现关联数组的遍历
$teacher = ['id'=>1001, 'name'=>'peter zhu', 'salary'=> 3000, 'course'=>'php'];

for ($i=0;$i<count($teacher);$i++){

echo key($teacher),'=>',current($teacher),'<br>'



}

运行实例 »

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

数组的排序

* 可用常量:
*  1.SORT_REGULAR: [默认]正常比较单元(不改变类型)
*  2.SORT_NUMERIC: 单元被作为数字来比较
*  3.SORT_STRING: 单元被作为字符串来比较
*  4.SORT_NATURAL: 单元以“自然的顺序”对字符串进行排序
*  5.SORT_FLAG_CASE: 不区分大小写排序字符串

sort() - 以升序对数组排序

rsort() - 以降序对数组排序

asort() - 根据值,以升序对关联数组进行排序

ksort() - 根据键,以升序对关联数组进行排序

arsort() - 根据值,以降序对关联数组进行排序

krsort() - 根据键,以降序对关联数组进行排序

实例

<?php
//数组元素的类型建议全部相同,否则会产生不可预见结果
//1.sort(&$arr, $flag):正序且键名重置
$arr = ['id'=>3, 'name'=>'zhu', 'course'=>'php', 'grade'=>60, 5=>true];
sort($arr);
/*
Array
(
    [0] => php
    [1] => zhu
    [2] => 3
    [3] => 60
    [4] => 1
)
*/

//2.asort($arr, $flag):正序且键名保留
 asort($arr);
//3.ksort(&$arr, $flat):键名正序排列
 ksort($arr);  //因为忽略了类型,5与其它键名类型不同,所以在最后面
  //4.rsort(&$arr):数组反转,忽略原键名
rsort($arr); //忽略类型分组排序

//5. arsort(&$arr):数组反转,保留键名
 arsort($arr, SORT_STRING); //键值对应关系不变,反转是指由大到小,所以ASCII小的
  //6. krsort(&$arr): 键名反转排序 
  krsort($arr, SORT_STRING); //键名全部视为字符类型,按字母表逆序排列键名

运行实例 »

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


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