第五章 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实现的功能是显示8条基色色带
Oct 09 PHP
PHP初学入门
Nov 19 PHP
40个迹象表明你还是PHP菜鸟
Sep 29 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
Aug 12 PHP
解析php中获取系统信息的方法
Jun 25 PHP
如何在Ubuntu下启动Apache的Rewrite功能
Jul 05 PHP
php通过数组实现多条件查询实现方法(字符串分割)
May 06 PHP
再推荐十款免费的php开发工具
Nov 09 PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 PHP
yii2实现根据时间搜索的方法
May 25 PHP
thinkPHP引入类的方法详解
Dec 08 PHP
Laravel 自动生成验证的实例讲解:login / logout
Oct 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执行.SQL文件
2013/07/05 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
jquery pagination插件动态分页实例(Bootstrap分页)
2016/12/23 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
JavaScript面向对象中接口实现方法详解
2019/07/24 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
python获得文件创建时间和修改时间的方法
2015/06/30 Python
Python max内置函数详细介绍
2016/11/17 Python
Python操作mongodb的9个步骤
2018/06/04 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
python logging设置level失败的解决方法
2020/02/19 Python
Python基于callable函数检测对象是否可被调用
2020/10/16 Python
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
大专生工程监理求职信
2013/10/04 职场文书
十佳班主任事迹材料
2014/01/18 职场文书
安全生产标语
2014/06/06 职场文书
一年级语文下册复习计划
2015/01/17 职场文书
街道社区活动报告
2015/02/05 职场文书
2015学校年度工作总结
2015/05/11 职场文书
如何写好开幕词?
2019/06/24 职场文书
MySQL锁机制
2021/04/05 MySQL
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL