【 数组 】
数组就是一组数据的集合,它把一系列数据组织起来,形成一个可操作的整体。如果说变量是存储单个值的容器,那么数组就是存储多个值的容器。
举一个简单的例子,当一个学生去书店选购教科书的时候,会按照学校的规定列出一个购书清单。清单包括:语文、数学、英语、地理、历史等,
这个清单称为为“选购书籍”,它列出了其内部的数据,而其内部的数据具有相同的性质。在PHP中,可以称这个清单为数组。
$qd = array ("语文","数学","英语","地理","历史") ;
在使用其中的数据时,可以直接利用它们在数组中的排列顺序取值,这个顺序称为数组的下标
如以下代码:
echo $qd[ 2 ];
结果为:英语
数组排序:
shuffle函数:能够将数组打乱,进行随机排序。
<?php
$shili = array ("1","2","3","4","5") ;
shuffle ( $shili ) ;
print_r ( $shili ) ;
echo $shili[1].$shili[3];
?> //输出的值总是改变的
sort函数:sort ( array &array [ ,int sort_flags] ) ;
本函数按照从低到高的顺序重新安排数组元素值。它为数组中的元素赋予了新的键名,这将删除原有的键名而不是重新排序。
其中第二个参数sort_flags可以用以下值改变排序的行为。
sort_regular:正常比较元素。
sort_numeric:元素被作为数字来比较。
sort_string:元素被作为字符串比较。
sort_locale_string:根据当前的区域(locale)设置把单元当作字符串比较。
asort()函数:对数组进行排序,并保持索引关系。
语法如下:
asort ( array &array [ ,int sort_flags] ) ;
本函数对数组进行排序,数组的索引键值保持和元素的关联。如果成功返回TRUE,失败返回
FALSE。
ksort()函数:对数组按照键名排序。
语法如下:
ksort ( array &array [, int sort_flags] ) ;
本函数主要用于关联数组的排序。如果成功返回TRUE,失败返回FALSE
rsort()函数:对数组进行逆向排序。
语法如下:
rsort ( array &array [ ,int sort_flags] ) ;
本函数对数组进行逆向排序(由高到低)。如果成功返回TRUE,失败返回FALSE。
输出数组
数组的输出是指如何通过语句或函数把数组中的内容显示出来。在PHP中,提供了echo语句、print_r()函数和var_dump()函数来实现数组的输出。
(1)Echo语句 通过数组中的元素下标,可以输出数组中单个或多个元素的值,输出多个元素值时要使用到循环语句,如for语句、while语句和foreach语句等。
(2)Print_r()函数 输出复杂的数据元素。它输出的是整个数组,包括元素值和下标。
(3)var_dump()函数 输出数组元素。它可以将一个或多个变量形态的值输出,输出其类型、长度和值。
例子:
<?php
$shili = array ('{dy}'=>"1",'第二'=>"2",'第三'=>"3",'第四'=>"4");
print_r ( $shili ) ; //输出数组$shili
echo "<br>" ;
var_dump ( $shili ) ; //使用var_dump输出数组$shili
echo $shili [ 2 ] ; //输出数组中下标为2的元素值
echo "<br>" ;
foreach($shili as $key=>$value) { echo $key."是 :".$value,"<br>\n"; }
//输出多个元素的键值和元素值
?>
去除数组中重复的元素:array_unique()函数
例子:
<?php
$input = array ("1" => "苹果", "橘子","鸭梨", "a" => "橘子", "香蕉", "苹果") ;
$result = array_unique ( $input ) ;
print_r ( $result ) ;
?> //输出:Array ( [1] => 苹果 [2] => 橘子 [3] => 鸭梨 [4] => 香蕉 )
删除数组:unset()函数
<?php
$shili = array ("休闲装","西服","职业装") ;
unset ($shili[1] ) ; //删除单个数组元素
print_r ( $shili ) ;
echo "<br>" ;
foreach ($shili as $i=>$value){
unset ($shili[$i]) ;
} //删除所有元素,但保持数组本身的结构
print_r ($shili );
unset ( $shili ) ; //删除整个数组
?>
声明数组
<?php
$shili = array (1,2,3,7=>4,3=>5,6,2=>7) ;
print_r ( $shili ) ; // print_r用于输出复杂的数据结构
?>//输出:Array ( [0] => 1 [1] => 2 [2] => 7 [7] => 4 [3] => 5 [8] => 6 )
//二维数组:
<?php
$shili = array (
"书籍"=>array ("文学","历史","地理"),
"体育用品"=>array ("m"=>"足球","n"=>"篮球"),
"水果"=>array ("橙子",8=>"葡萄","椰子") );
print_r ( $shili ) ;
?>//输出:
Array ( [书籍] => Array ( [0] => 文学 [1] => 历史 [2] => 地理 ) [体育用品] => Array ( [m] => 足球 [n] => 篮球 )
[水果] => Array ( [0] => 橙子 [8] => 葡萄 [9] => 椰子 ) )
说明:同array()函数类似的数组函数还有list(),它与array()函数的区别是:list()只能指定数字下标,并且下标必须从0开始。
遍历数组元素:array_walk()函数
array_walk (array array, callback function [ , mixed userdata ] ) ;
Array_walk()对第1个参数传递过来的数组中的每个元素,执行第2个参数定义的函数function()。典型情况下function()接受两个参数,其中,
数组名array的值为第1个参数,而数组下标或下标名为第2个参数。如果提供可选参数uerdata,将作为第3个参数传递给function()。函数执行成功返回true,否则返回false。
<?php
$shili = array ("1"=>"休闲装","2"=>"西服","3"=>"职业装") ; //声明数组
function yifu (&$my_shili, $key){ //自定义函数,改变数组中元素的值
if ($my_shili == "西服")
$my_shili = "$my_shili:就是它" ; //在元素“西服”的值后面加上“:就是它”
echo "($key) $my_shili <br>" ;
} //输出元素值
array_walk ($shili,"yifu") ; //使用array_walk()遍历整个数组,完成walk()函数功能
?>
向数组中添加数据:均可添加一个或多个元素
直接添加元素;
array_unshift() //所有的数值键名将从0开始重新计数,文字键名保持不变。
array_push() //将传入的变量添加到array的末尾。该函数返回数组新的单元总数。
<?php
$shili = array ("1","2","3","4") ;
$shili[]=5 ; //直接添加数据
print_r ( $shili ) ;
echo "<br>" ;
$shili2 = array ("m","n") ;
array_unshift ($shili2,"o","p") ; //添加元素于数组的开头
print_r ( $shili2 ) ;
echo "<br>" ;
$shili3 = array ("Php") ;
array_push ($shili3, "MySQL","Apache") ; //添加元素于数组的末尾
print_r ($shili3) ;
?>
输出:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
Array ( [0] => o [1] => p [2] => m [3] => n )
Array ( [0] => Php [1] => MySQL [2] => Apache )
改变数组大小:
array_pad()
array array_pad (array input,int pad_size,mixed pad_value) ;
{dy}个参数是要操作的数组;第二个参数pad_size是增加后的数组长度,如果pad_size为正,则数组被填补到右侧,如果为负则从左侧开始填补;
第三个参数pad_value给出所要增加的数据的值。函数执行后返回被更改以后的input数组。
<?php
$input = array ( 1,2,3 ,4) ; //定义的数组
print_r($input) ; // 输出变量
echo "<br>" ;
$result = array_pad ($input,-6,-2) ; //操作数组$input,增加后的长度-6,要增加的数值-2
print_r($result) ; //输出变量$result
echo "<br>" ;
$result = array_pad ($input,5,"noop" ) ; //增加后的长度5,要增加的数值noop
print_r ( $result ) ;
?>
输出:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
Array ( [0] => -2 [1] => -2 [2] => 1 [3] => 2 [4] => 3 [5] => 4 )
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => noop )
array_splice()函数
array array_splice (array input,int offset[, int length[, array replacement ] ] ) ;
input是要操作的数组;
offset是开始位置(为负则倒数,为空则从{dy}个元素开始);
length是要删除的元素个数(为空则删除从offset开始的后面所有元素,为负值则删除从offset到数组末尾倒数length为止中间所有的单元);
replacement用于替换被删除的那部分数组。函数执行后返回被更改以后的input数组。
示例:
<?php
$input = array ("1","2","3","4","5") ;
array_splice ($input,2) ;
print_r ($input) ;
//删除从第三个开始后面的所有元素 ,即删除数值3、4、5 ,{zh1}为1 2
$input = array ("1","2","3","4","5") ;
array_splice ( $input,1,-2 ) ;
print_r ( $input ) ;
//起点是第二个(数值2),终点是从末尾倒数2位后的位置(数值4),即删除数值2和3,{zh1}为:1 4 5
$input = array ("1","2","3","4","5") ;
array_splice ( $input,1,count ($input),"6") ;
print_r ( $input ) ;
//删除从{dy}个(数值2)开始后面的所有元素,并用来替代被删除的那部分,{zh1}为:1 6
$input = array ("1","2","3","4","5") ;
array_splice ($input,-1,1,array ("6","7")) ;
print_r ($input ) ; //倒数一位到数值5,删掉它,以6、7代替
?>
合并数组
array_merge()函数
array array_merge (array array1,array array2 [,array...]) ;
在合并时,如果输入的数组中有相同的字符串键名,则后面的值将覆盖前面的值;如果数组包含数字键名,后面的值不会覆盖原来的值,而是附加到后面。
<?php
$shili1 = array ("名字"=>"刘二",20,25,30) ;
$shili2 = array ("m","n","名字"=>"王","立"=>"100",5) ;
$result = array_merge ( $shili1,$shili2 ) ;
print_r ( $result ) ; //{dy}个元素中刘二被覆盖了,{zh1}是"王";其他的附加到后面
?>//输出:Array ( [名字] => 王 [0] => 20 [1] => 25 [2] => 30 [3] => m [4] => n [立] => 100 [5] => 5 )
array_merge_recursive()函数的功能与array_merge()函数相似,但是它可以保留同时出现在两个数组中相同字符键值上的元素。
Array ( [名字] => Array ( [0] => 刘二 [1] => 王 ) [0] => 20 [1] => 25 [2] => 30 [3] => m [4] => n [立] => 100 [5] => 5 )
访问数组的当前元素
foreach()函数
Foreach (array_name as $value) statement ;
Foreach (array_name as $key => $value) statement ;
Foreach语句与for循环语句相似,它获取数组当前元素,并按下标顺序自动指向下一元素。其语句的{dy}种格式遍历给定的array_name数组,
每次循环时当前元素的值被赋给$value,并且数组内部的下标向前移一步。第二种格式也实现同样的功能,但是它的当前元素的键值会在每次循环中赋给变量$key。
<?php
$example = array ("1"=>"玉米","2"=>"高粱","3"=>"大豆") ;
foreach ( $example as $key =>$value){
if ( $value == "玉米")
$value = "$value: 找的就是他了!" ; //改变“玉米”的值
echo "( $key ) $value<br>" ; }
?>
输出:
( 1 ) 玉米: 找的就是他了!
( 2 ) 高粱
( 3 ) 大豆
获取多个元素
array array_slice ( array array_name,int offset [,int length]) ;
//offset为起始位置,包括offset位置的元素本身,为负则倒数;length为负则倒数,为空则为所有
<?php
$input = array (1,2,3,4) ;
$put = array_slice ( $input,2 ) ;
print_r ( $put ) ; 从$input[2] = 3开始,返回后面的所有,即 3 4
echo "<br>" ;
$put = array_slice ($input,2,-1) ;
print_r( $put ) ; //从$input[2] = 3开始,终点是(倒数一位)4,返回 3
echo "<br>" ;
$put = array_slice ($input,-2,2) ;
print_r ( $put ) ; //倒数到3的位置,取两位,返回 3 4
echo "<br>" ;
$put = array_slice ($input,0,2) ;
print_r ( $put ) ; //从1开始后面的两位,返回 1 2
?>
输出:
Array ( [0] => 3 [1] => 4 )
Array ( [0] => 3 )
Array ( [0] => 3 [1] => 4 )
Array ( [0] => 1 [1] => 2 )
反转数组
Array array_reverse ( array array [, bool preserve_keys]) ;
如果参数preserve_keys为true,则保留原来的键名;否则,键名和值将同时对应反转。
<?php
$input = array ("php5",5.1,array ("1","2")) ;
$result = array_reverse ( $input ) ;
print_r ( $result ) ;
echo "<br>" ;
$result_keys = array_reverse ( $input,TRUE ) ;
print_r ( $result_keys ) ; //全部反转
?>
输出:
Array ( [0] => Array ( [0] => 1 [1] => 2 ) [1] => 5.1 [2] => php5 )
Array ( [2] => Array ( [0] => 1 [1] => 2 ) [1] => 5.1 [0] => php5 )