第五章 php数组操作


Posted in PHP onDecember 30, 2011

一.什么是数组
数组是一组有某种共同特性的元素,包括相似性和类型。
每个元素由一个特殊的标识符来区分,称之为key,而每个key都有一个value
1.创建数组的两种方式:
1.1 用array()函数

<?php 
$usernames = array ('Alerk', 'Mary', 'Lucy', 'Bob', 'Jack', 'John', 'Mark' ); 
foreach ( $usernames as $name ) 
{ 
echo $name . '<br/>'; 
} 
?>

output
Alerk
Mary
Lucy
Bob
Jack
John
Mark
1.2 用range()函数
<?php 
$numbers = range ( 0, 10 ); 
foreach ( $numbers as $num ) 
{ 
echo $num . '<br/>'; 
} 
$letters = range ( 'a', 'z' ); 
foreach ( $letters as $letter ) 
{ 
echo $letter . '<br/>'; 
} 
?>

output
0
1
2
3
4
5
6
7
8
9
10
a

c
d
e
f
g
h
i
j
k
l
m

o

q
r

t
u
v
w
x
y
z
2.循环访问数组元素的两种方式:
2.1 for循环

<?php 
//range的第三个参数表示步长 
$numbers = range(1,10,2); 
for($i = 0;$i<count($numbers); $i ++) 
{ 
echo $numbers[$i].'<br/>'; 
} 
?>

output
1
3
5
7
9
2.2 foreach循环
<?php 
$letters = range('a','h',2); 
foreach($letters as $letter) 
{ 
echo $letter.'<br/>'; 
} 
?>

output
a
c
e
g
Foreach还可以用来输出数组的下标和对应的值
<?php 
$letters = range('a','g',2); 
foreach($letters as $key => $value) 
{ 
echo $key.'---'.$value.'<br/>'; 
} 
?>

output
0---a
1---c
2---e
3---g
3.is_array()函数,用于变量判断是否为一个数组
<?php 
$numbers = range(1,10,2); 
if(is_array($numbers)) 
{ 
foreach($numbers as $num) 
{ 
echo $num.'<br/>'; 
} 
} 
else 
{ 
echo $numbers; 
} 
?>

4.print_r函数,打印关于变量的易于理解的信息
<?php 
$usernames = array ('Jackie', 'Mary', 'Lucy', 'Bob', 'Mark', 'John' ); 
print_r ( $usernames ); 
?>

output
Array ( [0] => Jackie [1] => Mary [2] => Lucy [3] => Bob [4] => Mark [5] => John )
源代码里可以看到显示为:
Array
(
[0] => Jackie
[1] => Mary
[2] => Lucy
[3] => Bob
[4] => Mark
[5] => John
)
二.自定义键数组
1.如果不想创建默认下标为零的数组,可以用如下方法,创建键为字符串的数组
<?php 
//初始化数组 
$userages = array('Jack'=> 23,'Lucy'=>25,'Mark'=>28); 
//访问数组各元素 
echo $userages['Jack'].'<br/>'; 
echo $userages['Lucy'].'<br/>'; 
echo $userages['Mark'].'<br/>'; 
?>

2.往自定义键数组里追加元素
<?php 
//初始化数组 
$ages = array('Jack'=>23); 
//追加元素 
$ages['Lucy']=25; 
$ages['Mark']=28; 
foreach($ages as $key => $value) 
{ 
echo $key.'----'.$value.'<br/>'; 
} 
?>

3.直接添加元素,无需创建数组。
<?php 
//不创建数组直接添加 
$ages['Jack']=23; 
$ages['Lucy']=25; 
$ages['Mark']=28; 
foreach($ages as $key => $value) 
{ 
echo $key.'----'.$value.'<br/>'; 
} 
?>

4.循环打印数组foreach的使用
<?php 
$ages['Jack']=23; 
$ages['Lucy']=25; 
$ages['Mark']=28; 
foreach($ages as $key => $value) 
{ 
echo $key.'=>'.$value.'<br/>'; 
} 
?>

5. each() -- 返回数组中当前的键/值对并将数组指针向前移动一步
<?php 
$ages['Jack']=23; 
$ages['Lucy']=25; 
$ages['Mark']=28; 
$a = each($ages); 
print_r($a); 
echo '<br/>'; 
$a = each($ages); 
print_r($a); 
echo '<br/>'; 
$a = each($ages); 
print_r($a); 
?>

用each()函数做循环打印
<?php 
$ages['Jack']=23; 
$ages['Lucy']=25; 
$ages['Mark']=28; 
while(!! $element = each($ages)) 
{ 
print_r($element); 
echo '<br>'; 
} 
?>

另一种打印方式
<?php 
$ages['Jack']=23; 
$ages['Lucy']=25; 
$ages['Mark']=28; 
while(!! $element = each($ages)) 
{ 
echo $element['key'].'=>'.$element['value']; 
echo '<br>'; 
} 
?>

6.list()函数的使用--把数组中的值赋给一些变量
<?php 
$ages['Jack']=23; 
$ages['Lucy']=25; 
$ages['Mark']=28; 
list($name,$age)= each($ages); 
echo $name.'=>'.$age; 
?>

用list循环打印结果
<?php 
$ages['Jack']=23; 
$ages['Lucy']=25; 
$ages['Mark']=28; 
while(!!list($name,$age)= each($ages)) 
{ 
echo $name.'=>'.$age.'<br>'; 
} 
?>

output
Jack=>23
Lucy=>25
Mark=>28
7.reset()函数的使用--将数组的内部指针指向第一个单元
<?php 
$ages['Jack']=23; 
$ages['Lucy']=25; 
$ages['Mark']=28; 
each($ages); 
each($ages); 
list($name,$age)= each($ages); 
echo $name.'=>'.$age.'<br>'; 
//把数组重新设定到数组开始处 
reset($ages); 
list($name,$age)= each($ages); 
echo $name.'=>'.$age.'<br>'; 
?>

Output
Mark=>28
Jack=>23
8. array_unique() -- 移除数组中重复的值
<?php 
$nums = array(1,2,3,4,5,6,5,4,3,2,1,1,2,3,4,5,6); 
//返回一个不包含重复值的数组 
$result = array_unique($nums); 
print_r($result); 
?> 
Output 
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 ) 
9. array_flip ()-- 交换数组中的键和值 
<?php 
$userages = array('Jack'=> 23,'Lucy'=>25,'Mark'=>28); 
$ages = array_flip($userages); 
print_r($ages); 
?>

output
Array ( [23] => Jack [25] => Lucy [28] => Mark )
三.数组里的数组
数组里不一定就是一个关键字和值的列表,数组里也可以放入数组
<?php 
$produces = array( 
array('apple',6,28.8), 
array('pear',3,15.6), 
array('banana',10,4.6) 
); 
echo $produces[0][0].'|'.$produces[0][1].'|'.$produces[0][2].'<br>'; 
echo $produces[1][0].'|'.$produces[1][1].'|'.$produces[1][2].'<br>'; 
echo $produces[2][0].'|'.$produces[2][1].'|'.$produces[2][2].'<br>'; 
?>

output
apple|6|28.8
pear|3|15.6
banana|10|4.6
用for循环打印数组中的数组
<?php 
$produces = array ( 
array ('apple', 6, 28.8 ), 
array ('pear', 3, 15.6 ), 
array ('banana', 10, 4.6 ) 
); 
for($i = 0; $i < count ( $produces ); $i ++) 
{ 
for($j = 0; $j < count ( $produces [$i] ); $j ++) 
{ 
echo '|' . $produces[$i][$j]; 
} 
echo '<br>'; 
} 
?>

output
|apple|6|28.8
|pear|3|15.6
|banana|10|4.6
二维数组
<?php 
$produces = array ( 
array ('name' => 'apple', 'amount' => 6, 'price' => 28.8 ), 
array ('name' => 'pear', 'amount' => 3, 'price' => 15.6 ), 
array ('name' => 'banana', 'amount' => 10, 'price' => 4.6 ) 
); 
while(!!List($key,$value)=each($produces)) 
{ 
while(!!list($key2,$value2)=each($value)) 
{ 
echo '|'.$key2.'=>'.$value2; 
} 
echo '<br>'; 
} 
?>

output
|name=>apple|amount=>6|price=>28.8
|name=>pear|amount=>3|price=>15.6
|name=>banana|amount=>10|price=>4.6
用foreach来打印则更容易(推荐)
<?php 
$produces = array ( 
array ('name' => 'apple', 'amount' => 6, 'price' => 28.8 ), 
array ('name' => 'pear', 'amount' => 3, 'price' => 15.6 ), 
array ('name' => 'banana', 'amount' => 10, 'price' => 4.6 ) 
); 
foreach($produces as $key1 => $value1) 
{ 
foreach($value1 as $key2 => $value2) 
{ 
echo '|'.$key2.'=>'.$value2; 
} 
echo '<br>'; 
} 
?>

output
|name=>apple|amount=>6|price=>28.8
|name=>pear|amount=>3|price=>15.6
|name=>banana|amount=>10|price=>4.6
四.数组的排序
1.Sort()函数对英文的排序
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
<?php 
$fruits = array('lemo','banana','apple','pear'); 
echo '原始的数组:'; 
print_r($fruits); 
echo '<br/>'; 
sort($fruits); 
echo '排序后的数组:'; 
print_r($fruits); 
?>

output
原始的数组:Array ( [0] => lemo [1] => banana [2] => apple [3] => pear )
排序后的数组:Array ( [0] => apple [1] => banana [2] => lemo [3] => pear )
2.Sort()函数对中文的排序
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
<?php 
$fruits = array('柠檬','香蕉','苹果','梨子'); 
echo '原始的数组:'; 
print_r($fruits); 
echo '<br/>'; 
sort($fruits); 
echo '排序后的数组:'; 
print_r($fruits); 
?>

Output:
原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 )
排序后的数组:Array ( [0] => 柠檬 [1] => 梨子 [2] => 苹果 [3] => 香蕉 )
3. asort -- 对数组进行排序并保持索引关系
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
<?php 
$fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子'); 
echo '原始的数组:'; 
print_r($fruits); 
echo '<br/>'; 
asort($fruits); 
echo '排序后的数组:'; 
print_r($fruits); 
?>

output
原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
排序后的数组:Array ( [a] => 柠檬 [d] => 梨子 [c] => 苹果 [b] => 香蕉 )
4. ksort -- 对数组按照键名排序
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
<?php 
$fruits = array('b'=>'柠檬','a'=>'香蕉','d'=>'苹果','c'=>'梨子'); 
echo '原始的数组:'; 
print_r($fruits); 
echo '<br/>'; 
ksort($fruits); 
echo '排序后的数组:'; 
print_r($fruits); 
?>

output
原始的数组:Array ( [b] => 柠檬 [a] => 香蕉 [d] => 苹果 [c] => 梨子 )
排序后的数组:Array ( [a] => 香蕉 [b] => 柠檬 [c] => 梨子 [d] => 苹果 )
5. rsort -- 对数组逆向排序
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
<?php 
$fruits = array('柠檬','香蕉','苹果','梨子'); 
echo '原始的数组:'; 
print_r($fruits); 
echo '<br/>'; 
rsort($fruits); 
echo '排序后的数组:'; 
print_r($fruits); 
?>

output
原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 )
排序后的数组:Array ( [0] => 香蕉 [1] => 苹果 [2] => 梨子 [3] => 柠檬 )
6. arsort -- 对数组进行逆向排序并保持索引关系
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
<?php 
$fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子'); 
echo '原始的数组:'; 
print_r($fruits); 
echo '<br/>'; 
arsort($fruits); 
echo '排序后的数组:'; 
print_r($fruits); 
?>

output
原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
排序后的数组:Array ( [b] => 香蕉 [c] => 苹果 [d] => 梨子 [a] => 柠檬 )
7. krsort -- 对数组按照键名逆向排序
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
<?php 
$fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子'); 
echo '原始的数组:'; 
print_r($fruits); 
echo '<br/>'; 
krsort($fruits); 
echo '排序后的数组:'; 
print_r($fruits); 
?>

output
原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
排序后的数组:Array ( [d] => 梨子 [c] => 苹果 [b] => 香蕉 [a] => 柠檬 )
8. shuffle -- 将数组打乱
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
<?php 
$fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子'); 
echo '原始的数组:'; 
print_r($fruits); 
echo '<br/>'; 
shuffle($fruits); 
echo '打乱后的数组:'; 
print_r($fruits); 
?>

output
原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
打乱后的数组:Array ( [0] => 香蕉 [1] => 苹果 [2] => 柠檬 [3] => 梨子 )
9. array_reverse -- 返回一个单元顺序相反的数组
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
<?php 
$fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子'); 
echo '原始的数组:'; 
print_r($fruits); 
echo '<br/>'; 
$fruits = array_reverse($fruits); 
echo '反转后的数组:'; 
print_r($fruits); 
?>

output
原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
反转后的数组:Array ( [d] => 梨子 [c] => 苹果 [b] => 香蕉 [a] => 柠檬 )
10. array_unshift -- 在数组开头插入一个或多个单元
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
<?php 
$fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子'); 
echo '原始的数组:'; 
print_r($fruits); 
echo '<br/>'; 
array_unshift($fruits,'?{子'); 
echo '插入后的数组:'; 
print_r($fruits); 
?>

output
原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
插入后的数组:Array ( [0] => ?{子 [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
11. array_shift -- 将数组开头的单元移出数组
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
<?php 
$fruits = array('a'=>'柠檬','b'=>'香蕉','c'=>'苹果','d'=>'梨子'); 
echo '原始的数组:'; 
print_r($fruits); 
echo '<br/>'; 
array_shift($fruits); 
echo '移出后的数组:'; 
print_r($fruits); 
?>

output
原始的数组:Array ( [a] => 柠檬 [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
移出后的数组:Array ( [b] => 香蕉 [c] => 苹果 [d] => 梨子 )
12. array_rand -- 从数组中随机取出一个或多个单元
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
<?php 
$fruits = array ('柠檬', '香蕉', '苹果', '梨子' ); 
echo '原始的数组:'; 
print_r ( $fruits ); 
echo '<br/>'; 
$newArr_key = array_rand ( $fruits, 2 ); 
echo '随机后的数组:'; 
echo $fruits [$newArr_key [0]].' '; 
echo $fruits [$newArr_key [1]]; 
?>

output
原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 )
随机后的数组:梨子 苹果
13. array_pop -- 将数组最后一个单元弹出(出栈)
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
<?php 
$fruits = array ('柠檬', '香蕉', '苹果', '梨子' ); 
echo '原始的数组:'; 
print_r ( $fruits ); 
echo '<br/>'; 
array_pop ( $fruits ); 
echo '弹出后的数组:'; 
print_r ( $fruits ); 
?>

Output:
原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 )
弹出后的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 )
14. array_push -- 将一个或多个单元压入数组的末尾(入栈)
<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
<?php 
$fruits = array ('柠檬', '香蕉', '苹果', '梨子' ); 
echo '原始的数组:'; 
print_r ( $fruits ); 
echo '<br/>'; 
array_push ( $fruits,'?{子'); 
echo '弹出后的数组:'; 
print_r ( $fruits ); 
?>

Output:
原始的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 )
弹出后的数组:Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 [4] => ?{子 )
五.数组的指针的操作
each -- 返回数组中当前的键/值对并将数组指针向前移动一步
current -- 返回数组中的当前单元
reset -- 将数组的内部指针指向第一个单元
end -- 将数组的内部指针指向最后一个单元
next -- 将数组中的内部指针向前移动一位
pos -- current() 的别名
prev -- 将数组的内部指针倒回一位
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php 
$fruits = array ('柠檬', '香蕉', '苹果', '梨子' ); 
print_r ( $fruits ); 
echo '<br/>'; 
echo 'each() : '; 
print_r ( each ( $fruits ) ); 
echo '<br/>'; 
echo 'current() : '; 
echo (current ( $fruits )); 
echo '<br/>'; 
echo 'next() : '; 
echo (next ( $fruits )); 
echo '<br/>'; 
echo 'end() : '; 
echo (end ( $fruits )); 
echo '<br/>'; 
echo 'prev() : '; 
echo (prev ( $fruits )); 
echo '<br/>'; 
echo 'pos() : '; 
echo (pos ( $fruits )); 
echo '<br/>'; 
?>

Output:
Array ( [0] => 柠檬 [1] => 香蕉 [2] => 苹果 [3] => 梨子 )
each() : Array ( [1] => 柠檬 [value] => 柠檬 [0] => 0 [key] => 0 )
current() : 香蕉
next() : 苹果
end() : 梨子
prev() : 苹果
pos() : 苹果
六.统计数组个数
count -- 计算数组中的单元数目或对象中的属性个数
sizeof -- count() 的别名
array_count_values -- 统计数组中所有的值出现的次数
<?php 
$nums = array (1, 3, 5, 1, 3, 4, 5, 65, 4, 2, 2, 1, 4, 4, 1, 1, 4, 1, 5, 4, 5, 4 ); 
echo count ( $nums ); 
echo '<br>'; 
echo sizeof ( $nums ); 
echo '<br>'; 
$arrayCount = array_count_values ( $nums ); 
print_r ( $arrayCount ); 
?>

output
22
22
Array ( [1] => 6 [3] => 2 [5] => 4 [4] => 7 [65] => 1 [2] => 2 )
七.将数组转换成标量变量:extract()
把数组中的每个元素转换成变量,变量名是数组元素的key,变量值为数组元素的value.
<?php 
$fruits = array('a'=>'apple','b'=>'banana','o'=>'orange'); 
extract($fruits); 
echo $a.'<br>'; 
echo $b.'<br>'; 
echo $o.'<br>'; 
?>

output
apple
banana
orange
PHP 相关文章推荐
一棵php的类树(支持无限分类)
Oct 09 PHP
PHP中GET变量的使用
Oct 09 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
php实现快速排序法函数代码
Aug 27 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
Jun 20 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
Nov 08 PHP
smarty中post用法实例
Nov 28 PHP
php中执行系统命令的方法
Mar 21 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
Jun 09 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
Sep 28 PHP
Laravel使用RabbitMQ的方法示例
Jun 18 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 PHP
第四章 php数学运算
Dec 30 #PHP
第三章 php操作符与控制结构代码
Dec 30 #PHP
第二章 PHP入门基础之php代码写法
Dec 30 #PHP
php 短链接算法收集与分析
Dec 30 #PHP
php的大小写敏感问题整理
Dec 29 #PHP
php读取mysql乱码,用set names XXX解决的原理分享
Dec 29 #PHP
php站内搜索并高亮显示关键字的实现代码
Dec 29 #PHP
You might like
php socket方式提交的post详解
2008/07/19 PHP
PHP 数据库树的遍历方法
2009/02/06 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
php实现socket推送技术的示例
2017/12/20 PHP
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
2011/07/08 Javascript
JS两种定义方式的区别、内部原理
2013/11/21 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
微信小程序 教程之注册程序
2016/10/17 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
python验证身份证信息实例代码
2019/05/06 Python
python实现删除列表中某个元素的3种方法
2020/01/15 Python
python实现拼接图片
2020/03/23 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
Order by的几种用法
2013/06/16 面试题
初级软件工程师面试题 Junior Software Engineer Interview
2015/02/15 面试题
实习报告评语
2014/04/26 职场文书
大学毕业生个人总结
2015/02/28 职场文书
应聘教师求职信范文
2015/03/20 职场文书
校车安全管理责任书
2015/05/11 职场文书
党支部意见范文
2015/06/02 职场文书
祝福语集锦:送给毕业同学祝福语
2019/11/21 职场文书
使用Python解决图表与画布的间距问题
2022/04/11 Python
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技