Blogger Information
Blog 32
fans 0
comment 0
visits 19873
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
0417php数组的操作
田亢的博客
Original
591 people have browsed it

一、在 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); //键名全部视为字符类型,按字母表逆序排列键名

运行实例 »

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


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