文章目录
使用数组
数组的本质是用来存储、管理和操作一组变量。PHP中的数组实际上是一个有序映射,映射是一种把values关联到keys的类型。
数组类型
PHP中有两种类型的数组,即索引数组和关联数组。索引数组的键由数字组成,在没有特别指定时,数组默认为索引数组。关联数组的键由字符串和数字混合组成。
-
关联数组:
$array = array('a'=>'foo', 'b'=>'bar')
-
索引数组:
$array = array(1=>'foo', 2=>'bar')
在数组中,如果未指定键,PHP就将自动使用之前用过的最大的数字键加1作为新的键。
【示例】
<?php
$array1 = array("foo", "bar", "hallo", "world");
var_dump($array1)
echo "<br />";
$array2 = array(
"a",
"b",
6=>"c",
"d",
);
var_dump($array2);
?>
以上代码输出结果为:
代码解析:
以上代码中$array1
没有指定键名,所以默认数组为索引数组,$array2
中最后一个值"d"被自动赋予键名7,因为之前最大整数键名是6。
创建数组
可以使用array()创建数组,除此之外还可以使用方括号[]创建数组,还可以使用range()
函数来建立一个包含指定范围单元的数组。
array range(mixed $start, mixed $limit[, number $step=1])
其中start
是序列的第一个值,序列结束语limit
的值。如果给出了step
的值,它将被作为单元之间的步进值。step
应该为正值,如果未指定,step
默认为1。
二维数组和多维数组
二维数组
将两个以为数组组合起来就可以构成一个二维数组,使用二维数组可以保存较为复杂的数据。
【示例】
<?php
$person = array(
'lily'=>array('age'=>20, 'weight'=>'50kg', 'hobby'=>'sleep'),
'Tom'=>array('age'=>12, 'weight'=>'40kg', 'hobby'=>'eat'),
'Andy'=>array('age'=>30, 'weight'=>'70kg', 'hobby'=>'write')
);
print_r($person);
?>
输出结果:
代码解析:
数组person
中的元素lily
、Tom
和Andy
对应的值分别是一个以为数组,这3个以为数组组成了一个二维数组。
多维数组
同二维数组一样,可以很容易的创建三维数组、四维数组或者其他更高维数的数组。实际上可以将所有数组都认为是以为数组,只不过其元素依然可以是数组,如果元素也是以为数组就组成了二维数组,如果元素是二维数组就组成了三维数组,以此类推。
PHP中对多维数组没有上限的固定限制,但是随着维度的增加数组会越来越复杂,对于阅读调试和维护都会变得困难。
数组操作
检查数组中是否存在某个值
in_array
函数判断数组中是否存在某个值。
说明:
in_array(mixed $needle, array $haystack[, bool $strict=FALSE]):bool
在haystack
中搜索needle
,如果没有设置strict
,就是用宽松的比较。如果strict
的值为true,则in_array()函数还会检查needle
的类型是是否和`haystack中的相同。
参数:
- needle
待搜索的值。如果needle是字符串,则比较是区分大小写的。 - haystack
待搜索的数组。 - strict
如果第三个参数strict
的值为TRUE
则in_array()
函数还会检查needle的类型是否和haystack
中相同
返回值:
如果找到needle则返回TRUE,否则返回FALSE。
【示例】
<?php
$arr = array(
'安徽'=>array(
'阜阳'=>array('阜南县','临泉县','颍州区'),
'宿州'=>array('墉桥区','灵璧县','泗县'),
'合肥'=>array('蜀山区','长丰县','肥东'),
),
'河南'=>array(
'洛阳'=>array('西工区','老城区','孟津县'),
'郑州市'=>array('中原区','金水区'),
),
);
var_dump(in_array('阜南县', $arr)); //false
$arr1 = ['red', 'green', 'black'];
var_dump(in_array('green', $arr1)); //true
?>
代码解析:
由于没有设置strict
的值,因此in_array()
只做了一级检查,只在当前维度检查是否包含相应元素,而不会递归到数组中的每个元素。
数组转换为字符串
使用implode()
函数可以将一个一维数组转化为字符串。
说明:
implode(string $glue, array $pieces):string
implode(array $pieces):string
该函数用$glue
将一维数组$pieces
的值连接为一个字符串。
参数:
- glue
默认为空的字符串。 - pieces
带转换为字符串的数组。
返回值:
返回一个字符串,其内容为glue分割开的数组的值。
此函数可以安全用于二进制对象。
【示例】
<?php
$arr = array('lastname', 'emial', 'phone'); // 声明数组
$comma_separated = implode(",", $arr); // 分割数组
echo $comma_separated; // 输出结果
?>
程序输出结果:
代码解析:
以上代码中,使用“,”将数组的三个元素连接成了一个字符串。
计算数组中的单元数目
使用count()
函数可计算数组中的单元数目,count()
函数还可以计算对象中的属性个数。
说明:
count(mixed $array_or_countable[, int $mode=COUNT_NORMAL]):int
计算数组中的单元数目,或对象中的属性个数。
参数:
- array_or_countable
数组或者Countable
对象。 - mode
如果可选的mode
参数设置为COUNT_RECURSIVE
(或1),count()
将递归对数组计数。对计算对维数组的所有单元尤其有用。
返回值:
返回array_or_countable
中的单元数目。如果参数既不是数组,也不是实现Countalbe
接口的对象,将返回1。例外情况:如果array_or_countable
是NULL
则结果是0。
【示例】
<?php
$food = array(
'fruits'=>array('orange', 'banana', 'apple'),
'veggie'=>array('carrot', 'collard', 'pea')
);
echo count($food, COUNT_RECURSIVE); // 结果为8
echo "<br \>";
echo count($food); // 结果为2
?>
程序输出结果:
代码解析:
以上代码中$food
为一个二维数组,当不指定mode
时,默认不会对数组进行递归计算,当指定该参数值为1或者COUNT_RECURSIVE
时,则会对数组进行递归,因此结果是8。
数组当前单元和数组指针
使用current()
函数可返回数组的当前单元。
说明:
current(array &$array):mixed
每个数组中都有一个内部的指针指向它“当前的”单元,初始指向插入到数组中的第一个单元。
参数:
- array
这个数组
返回值:
current()
函数返回当前被内部指针指向的数组单元的值,并不移动指针。如果内部指针指向超出了单元列表的末端,current()
返回FALSE
。
与数组内部指针相关的函数有:
-
next()
说明:next(array &$array):mixed
next()
和current()
的行为类似,只有一点区别,在返回值之前将内部指针向前移动一位。这意味着它返回的是下一个数组单元的值并将数组指针向前移动了一位。参数:
- array
受影响的数组
返回值:
返回数组内部指针指向的下一个单元的值,或当没有更多单元时返回
FALSE
- array
-
prev()
说明:将数组的内部指针倒回一位。
prev()
和next()
的行为类似,只除了它将内部指针倒回一位而不是前移一位。参数:
- array
受影响的数组
返回值:
返回数组内部指针指向的前一个单元的值,或当没有更多单元时返回
FALSE
。 - array
-
end()
说明:end(array &$array):mixed
end()
将array
的内部指针移动到最后一个单元并返回其值。参数:
- array
受影响的数组。该数组是通过引用传递的,因为它会被这个函数修改。这意味着你必须传递一个变量,而不是函数返回的数组,因为只有真正的变量才能以引用传递。
返回值:
返回最后一个元素的值,或者如果是空数组则返回
FALSE
。 - array
-
reset()
说明:reset(array &$array):mixed
reset()
将array
的内部指针倒回到第一个单元并返回第一个数组单元的值。参数:
- array
受影响的数组。 - 返回值:
返回数组第一个单元的值,如果数组为空则返回
FALSE
。 - array
-
each()
说明:
each(array &$array):array
返回数组中当前的键/值对并将数组指针向前移动一步 。
在执行
each()
之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用each
遍历数组,必须使用reset()
。参数:
- array
受影响的数组。
返回值:
返回
array
数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为0,1,key和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。 如果内部指针越过了数组的末端,则each()
返回FALSE
。 - array
【示例】
<?php
$transport = array('foot', 'bike', 'car', 'plane');
$mode = current($transport); // $mode = 'foot';
$mode = next($transport); // $mode = 'bike';
$mode = next($transport); // $mode = 'car';
$mode = prev($transport); // $mode = 'bike';
$mode = end($transport); // $mode = 'plane';
$mode = next($transport)
var_dump($mode); // bool(false)
echo '<br />';
reset($transport);
// array(4) { [1]=> string(4) "foot" ["value"]=> string(4) "foot" [0]=> int(0) ["key"]=> int(0) }
var_dump(each($transport));
echo '<br />';
// array(4) { [1]=> string(4) "bike" ["value"]=> string(4) "bike" [0]=> int(1) ["key"]=> int(1) }
var_dump(each($transport));
?>
程序输出结果:
代码解析:
以上代码中,数组被声明后内部指针默认指向数组的第一个单元,因此代码中第一个mode
变量的值是’foot’,next()
将指针向前移动一位,并返回移动后当前单元的值,因此第二个mode
的值是’bike’,经过next()
后数组的指针停留在数组的第二个单元,所以第三个mode
值也是’bike’,prev()
将数组内部指针前移一位,指向了’foot’,end()
将数组指针移动到最后一个单元,指向’plane’。
数组中的键名和值
-
从关联数组中取得键名
使用key()
函数可以从关联数组中返回键名。说明:
key(array $array):mixed
返回数组中当前单元的键名。
参数:
- array
该数组。
返回值:
返回数组中内部指针指向的当前单元的键名。 但它不会移动指针。如果内部指针超过了元素列表尾部,或者数组是空的,
key()
会返回NULL
。【示例】
<?php $array = array( 'fruit1'=>'apple', 'fruit2'=>'orange', 'fruit3'=>'grape', 'fruit4'=>'apple', 'fruit5'=>'apple'); for($i = 0; $i < count($array); $i++) { // 循环数组 echo key($array)."<br />"; // 输出指针指向当前单元的键 next($array); // 将数组指针向前移动一位 } ?>
程序输出结果:
- array
-
检查给定键名或索引是否存在与数组中
使用array_key_exists()
函数检查给定键名或索引是否存在与数组中。
说明:
array_key_exists(mixed $key, array $array):bool
数组里有键
key
时,array_key_exists() 返回TRUE
。key
可以是任何能作为数组索引的值。参数:
- key
要检查的键。 - array
一个数组,包含待检查的键。
返回值:
成功时返回
TRUE
, 或者在失败时返回FALSE
。array_key_exists()仅仅搜索第一维的键。多维数组里嵌套的键不会被搜索到。
【示例】
<?php $search_array = array('first'=>1, 'second'=>4); if (array_key_exists('first', $search_array)){ echo "The 'first' element is in the array"; } ?>
程序输出结果:
- key
-
获取数组中部门或所有键名
使用array_keys()
函数可获得数组中部分或所有键名。
说明:
array_keys(array $input[, mixed $search_value=null[, bool $strict=false]]):array
array_keys() 返回
input
数组中的数字或者字符串的键名。如果指定了可选参数search_value
,则只返回该值的键名。否则input
数组中的所有键名都会被返回。参数:
- input
一个数组,包含了要返回的键。 - search_value
如果指定了这个参数,只有包含这些值的键才会被返回。 - strict
判断在搜索的时候是否该使用严格的比较(===)。
返回值:
返回input里的所有键。
【示例】
<?php $array = array(0=>100, "color"=>"red"); echo "<pre>"; print_r(array_keys($array)); $array = array("blue", "red", "green", "blue", "blue"); print_r(array_keys($array, "blue")); // 返回数组中值为blue的键 $array = array( "color"=>array("blue", "red", "green"), "size"=>array("small", "medium", "large")); print_r(array_keys($array)); // 只返回当前维度的数组的键 ?>
程序输出结果:
- input
-
获取数组中的所有值
使用array_values()
函数可获得数组中的所有值。
说明:
array_values(array $input):array
array_values()
返回input
数组中所有的值并给其建立数字索引。参数:
- array
该数组。
返回值:
返回包含所有值的索引数组。
【示例】
<?php $array = array("blue", "red", "green"); echo "<pre>"; print_r(array_values($array)); // 返回数组$array中的所有值 ?>
程序输出结果:
- array
-
搜索给定值返回键名
使用array_search()
函数可以在数组中搜索给定的值,如果成功就返回相应的键。
说明:
array_search(mixed $needle, array $haystack[, bool $strict=false]):mixed
如果在
haystack
中搜索到了needle
,就返回它的键, 否则返回false
。如果needle
在haystack
中不止一次出现,就返回第一个匹配的键。要返回所有匹配值的键, 应该用array_ keys()加上可选参数search_value
来代替。如果可选参数strict 为true
,那么array_search()
将在haystack中
检查完全相同的元素。这意味着同样检查haystack
里needle
的类型, 并且对象须是同一个实例。参数:
- needle
搜索的值。如果needle是字符串,则比较以区分大小写的方式进行。 - haystack
这个数组。 - strict
如果可选的第三个参数strict
为TRUE
,则array_search()
将在haystack
中检查完全相同的元素。这意味着同样严格比较haystack
里needle
的类型,并且对象是同一实例。
返回值:
如果找到了
needle
则返回它的键,否则返回FALSE
。如果needle
在haystack
中出现不止一次,则返回第一个匹配的键。要返回所有匹配值的键,应该用array_keys()
加上可选参数search_value
来代替。【示例】
<?php $array = array(0=>'blue', 1=>'red', 2=>'green', 3=>'red'); $key = array_search('green', $array); // 查找数组中值为green的键,此时$key=2; $key = array_search('red', $array); //查找数组中值为'red'的键,此时$key=1 ?>
- needle
数组填充
-
array_pad()
函数
说明:
array_pad(array $array, int $size, mixed $value):array
array_pad()
返回array
的一个拷贝,并用value
将其填补到size
指定的长度。如果size
为正,则填补到数组的右侧,如果为负则从左侧开始填补。如果size
的绝对值小于或等于array
数组的长度则没有任何填补。有可能一次最多填补1048576 个单元。参数:
- array
需要被填充的原始数组。 - size
新数组的长度。 - value
将被填充的值,只有在 array 的现有长度小于 size 的长度时才有效。
返回值:
返回
array
用value
填充到size
指定的长度之后的一个副本。如果size
为正,则填补到数组的右侧,如果为负则从左侧开始填补。如果size
的绝对值小于或等于array
数组的长度则没有任何填补。【示例】
<?php $input = array(12, 10, 9); echo '<pre>'; // 从数组右侧开始,用0填充数组到含有5个元素 $result = array_pad($input, 5, 0); print_r($result); // 从数组左侧开始,用-1填充数组到含有7个元素 $result = array_pad($input, -7, -1); print_r($result); // 第二个谙熟小于数组长度,不填充 $result = array_pad($input, 2, "noop"); print_r($result); ?>
程序输出结果:
- array
-
array_fill()
函数
该函数可以用给定的值填充数组。
说明:
array_fill(int $start_index, int $num, mixed $value):array
array_fill()
用value
参数的值将一个数组填充num
个条目,键名由start_index
参数指定的开始。参数:
- start_index
返回的数组的第一个索引值。如果start_index
是负数,那么返回的数组的第一个索引将会是start_index
,而后面索引则从0开始。 - num
插入元素的数量。必须大于或等于0. - value
用来填充的值。
返回值:
返回填充后的数组。
【示例】
<?php // 使用banana填充数组到6个元素,索引键由数字5开始 $a = array_fill(5, 6, "banana"); // 使用pear填充数组到4个元素,索引建由-2开始 $b = array_fill(-2, 4, 'pear'); // 用一个数组填充成一个二维数组 $c = array_fill(3, 2, array('green', 'red', 'blue')); echo '<pre>'; print_r($a); print_r($b); print_r($c); ?>
程序输出结果:
- start_index
-
array_fill_keys()
函数
该函数使用指定的键和值填充数组。
语法:
array_fill_keys(array $keys, mixed $value):array
使用
value
参数的值作为值,使用keys
数组的值作为键来填充一个数组。参数:
- keys
使用该数组的值作为键。非法值将被转换为字符串。 - value
填充使用的值。
返回值:
返回填充后的数组
【示例】
<?php $keys = array('foo', 5, 10, 'bar'); // 使用$keys数组的值作为键,banana作为值重新组建一个数组 $a = array_fill_keys($keys, "banana"); // 使用$keys的值作为键,另一个数组作为元素,组成一个新的二维数组 $b = array_fill_keys($keys, array('red', 'green', 'blue')); echo '<pre>'; print_r($a); print_r($b); ?>
程序输出结果:
- keys
从数组中随机去除一个或多个单元
array_rand()
函数可以从数组中取出一个或多个随机的单元,并返回随机条目的一个或多个键。
说明:
array_rand(array $array[, int $num=1]):mixed
从数组中取出一个或多个随机的单元,并返回随机条目的一个或多个键。 它使用了伪随机数产生算法,所以不适合密码学场景。
参数:
- array
输入的数组。 - num
指明了想取出多少个单元。
返回值:
如果只取出一个,array_rand()
返回随机单元的键名。否则就返回包含随机键名的数组。完成后,就可以根据随机的键获取数组的随机值。取出数量如果超过array
的长度,就会导致E_WARNING
错误,并返回NULL
。
【示例】
<?php
$input = array("Neo", "morpheus", "Trinity", "Cypher", "Tank");
// 从$input数组中随机取出2个单元,组成一个新的数组
$rand_keys = array_rand($input, 2);
echo '<pre>';
print_r($rand_keys);
?>
程序输出结果:
数组排序与打乱数组
-
sort()
函数
说明:
srot(array &$array[, int $sort_flags=SORT_REGULAR]):bool
本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。
参数:
- array
要排序的数组 - sort_flags
可选的第二个参数sort_flags
可以用以下值改变排序的行为:
排序类型标记:- SORT_REGULAR-正常比较单元(不改变类型)
- SORT_NUMERIC-单元被作为数字来比较
- SORT_STRING-单元被作为字符串来比较
- SORT_LOCAL_STRING-根据当前的区域(local)设置来把单元当做字符串比较,可以用
setlocal()
来改变 - SORT_NATURAL-和
natsor()
类似对每个单元以“自然的顺序”对字符串进行排序。(PHP5.4.0中新增) - SORT_FLAG_CASE-能够与SORT_STRING或SORT_NATURAL合并(OR位运算),不区分大小写排序字符串。
返回值:
成功时返回
TRUE
,或者在失败时返回FALSE
。【示例】
<?php $fruits = array("lemon", "banana", "apple"); sort($fruits); // 数组排序 echo '<pre>'; print_r($fruits); ?>
程序输出结果:
- array
-
asort()
函数
说明:
asort(array &$array[, int $sort_flags=SORT_REGULAR]):bool
本函数对数组进行排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。
参数:
- array
输入数组。 - sort_flags
可以用可选的参数sort_flags
改变排序的行为,取值与sort()
一样。
返回值:
成功时返回
TRUE
,或者在失败时返回FALSE
。【示例】
<?php $fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); asort($fruits); // 数组排序 echo '<pre>'; print_r($fruits); ?>
程序输入结果:
- array
-
arsort()
函数
说明:
arsort(array &$array[, int $sort_flags=SORT_REGULAR]):bool
本函数对数组进行逆向排序,数组的索引保持和单元的关联。主要用于对那些单元顺序很重要的结合数组进行排序。
参数:
- array
输入的数组 - srot_flags
可以用可选的参数sort_flags
改变排序的行为,取值与sort()
一样。
返回值:
成功时返回
TRUE
,或者在失败时返回FALSE
。【示例】
<?php $fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); arsort($fruits); // 数组排序 echo '<pre>'; print_r($fruits); ?>
程序输出结果:
- array
-
rsort()
函数
说明:
rsort(array &$array[, int $sort_flags=SORT_REGULAR]):bool
对数组进行逆向排序,但是不保持索引关系。
参数:
- array
输入的数组。 - srot_flags
可以用可选的参数sort_flags
改变排序的行为,取值与sort()
一样。
返回值:
成功时返回
TRUE
,或者在失败时返回FALSE
。【示例】
<?php $fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple"); rsort($fruits); // 数组排序 echo '<pre>'; print_r($fruits); ?>
程序输出结果:
- array
-
shuffle()
函数
说明:
shuffle(array &$array):bool
本函数打乱(随机排列单元的顺序)一个数组。 它使用的是伪随机数产生器,并不适合密码学的场合。
参数:
- array
待操作的数组。
返回值:
成功时返回
TRUE
,或者在失败时返回FALSE
。【示例】
<?php $numbers = range(1, 20); echo "打乱之前"; foreach($numbers as $number){ echo "$number "; } shuffle($numbers); // 打乱数组顺序 echo "<br />打乱之后"; foreach($numbers as $number){ echo "$number "; } ?>
程序输出结果:
- array
遍历数组
编程中常用for、foreach、each(PHP7.2已弃用)、list对数组进行遍历。
-
for循环遍历数组
【示例】<?php $fruits = array("lemon", "orange", "banana", "apple"); for($i = 0; $i < count($fruits); $i++) { echo current($fruits)."\n"; echo $fruits[$i]."<br />"; } ?>
程序运行结果:
从以上代码的运行可以看到,for循环遍历数组的形式没有改变数组的内部指针。
-
foreach遍历数组
【示例】<?php $array=[0, 1, 2]; foreach($array as &$val){ //遍历数组 echo $val; } ?>
以上程序会输出:012
【示例2】
<?php $array=[0, 1, 2]; foreach($array as &$val){ //遍历数组,使用current()输出数组指针指向的当前单元的值 var_dump(current($array)); } ?>
在PHP7中,输出结果为:
在PHP7之前的版本中输出结果为:
【示例3】<?php $array = [0, 1, 2]; foreach($array as $val){ $var = $val * 2; // 元素值乘以2 } var_dump($array); ?>
程序输出结果:
通过以上代码可以看出,foreach循环是对数组的备份进行操作,在循环内部修改数组不会对循环之外访问数组有影响。但如果是按照引用循环,那么在循环内部对数组做的修改会影响数组本身。
-
each()和list()
each()函数返回数组中当前的键值并将数组指针向前移动。在执行each()之后,数组指针将停留在数组中的下一个单元后者当碰到数组结尾时停留在最后一个单元。如果再要用each遍历数组,需要使用reset()。<?php echo "<pre>"; $foo = array("bob", "fred", "jussi", "jouni", "egon", "marliese"); $bar1 = each($foo); // 指针向后移动一位 print_r($bar1); echo current($foo); // 当前指针 echo "<br />"; $bar2 = each($foo); print_r($bar2); echo current($foo); ?>
程序输出结果:
注意:each()函数在PHP7.2中已弃用。
each()函数和list()函数结合使用可以遍历数组:
【示例】
<?php $fruit = array('a'=>'apple', 'b'=>'banana', 'c'=>'cranberry'); while(list($key, $val)=each($fruit)){ echo "$key=>$val<br />"; } ?>
list()
结构:把数组中的值赋给一组变量。
说明:
list(mixed $var1[, mixed $...]):array
像
array()
一样,这不是真正的函数,而是语言结构。list()
可以在单次操作内就为一组变量赋值。在 PHP 7.1.0 之前的版本,
list()
仅能用于数字索引的数组,并假定数字索引从 0 开始。PHP 5 里,
list()
从最右边的参数开始赋值;PHP 7 里,list()
从最左边的参数开始赋值。 如果你用单纯的变量,不用担心这一点。但是如果你用了具有索引的数组,通常你期望得到的结果和在list()
中写的一样是从左到右的,但在 PHP 5 里实际上不是,它是以相反顺序赋值的。
数组的拆分与合并
-
array_chunk()
函数
说明:
array_chunk(array $array, int $size[, bool $preserve_keys=false]):array
将一个数组分割成多个数组,其中每个数组的单元数目由
size
决定。最后一个数组的单元数目可能会少于size
个。参数:
- array
需要操作的数组 - size
每个数组的单元数目 - preserve_kyes
设为TRUE
,可以使PHP保留输入数组中原来的键名。如果指定为FALSE
,那每个结果数组将用从零开始的新数字索引。默认值是FALSE
。
返回值:
得到数组是一个多维数组中的单元,其索引从零开始,每一维包含了
size
个元素。如果
size
小于1,会抛出一个E_WARNING
错误并返回NULL
。【示例】
<?php echo "<pre>"; $input_array = array('a'=>array('x', 'y'), 'b', 'c', 'd', 'e'); print_r(array_chunk($input_array, 2)); // 设置$preserve_keys的值为true,保留原来的键名 print_r(array_chunk($input_array, 2, true)); ?>
程序输出结果:
- array
-
array_merge()
函数
该函数可以合并一个或多个数组。
说明:
array_merge(array $array1[, $array $...]):array
array_merge()
将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将***不会***覆盖原来的值,而是附加到后面。如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。参数:
- array1
要合并的第一个数组。 - …
要合并的数组列表。
返回值:
返回结果数组。
【示例】
程序输出结果:
如果想完全保留原有数组并只想将新的数组附加到后面,就用“+”运算符。使用“+”运算符连接数组,连接的数组中键名相同时第一个数组的键值对将会保留,后面的将被舍弃。
【示例】
<?php $array1 = array(0=>'zero_a', 2=>'two_a', 3=>'three_a'); $array2 = array(1=>'one_b', 3=>'three_b', 4=>'four_b'); $result = $array1 + $array2; var_dump($result); ?>
程序输出结果:
- array1
增加/删除数组中的元素
-
array_unshift()
函数
该函数可在数组开头插入一个或多个单元。
说明:
array_unshift(array &$array[, mixed $...]):int
array_unshift()
将传入的单元插入到array
数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的字符串键名保持不变。参数:
- array
输入的数组 - …
插入的变量
返回值:
返回
array
数组新的单元数目。【示例】
<?php $queue = array('a'=>'orange', 1=>'banana'); array_unshift($queue, "apple", "raspbery"); print_r($queue); ?>
程序输出结果:
可以看到原始数组中键值为1的单元,此时键值已经发生了改变。
- array
-
array_shift()
函数
该函数可以将数组开头的单元移出数组。
说明:
array_shift(array &$array):mixed
array_shift()
将array
的第一个单元移出并作为结果返回,将array
的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,字符串键名将不变。使用此函数后会重置(
reset()
)array指针。参数:
- array
输入的数组。
返回值:
返回移出的值,如果array为空或不是一个数组则返回NULL。
【示例】
<?php $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_shift($stack); print_r($stack); ?>
程序输出结果:
从输出结果可以看到orange被移出了数组,并且数组的键名发生了改变。 - array
-
array_push()
函数
该函数用来将一个或多个单元压入数组的末尾(入栈)。
说明:
array_push(array &$array, mixed $value1[, mixed $...]):int
array_push()
将array
当成一个栈,并将传入的变量压入array
的末尾。array
的长度将根据入栈变量的数目增加。如果用
array_push()
来个数组增加一个单元,不如使用$array[]=$val
的方式,因为这样没有调用函数的额外负担。如果第一个参数不是数组,该函数会发出一条警告。这和$var[]的行为不同,后者会新建一个数组。参数:
- array
输入的数组。 - value1
要压入数组末尾的第一个值。
返回值:
返回处理之后数组的元素个数。
【示例】
<?php $stack = array("orange", "banana"); $fruit = array_push($stack, "apple", "raspberry"); print_r($stack); ?>
程序输出结果:
- array
-
array_pop()
函数
该函数可将数组的最后一个单元弹出(出栈)。
说明:
array_pop(array &$array):mixed
array_pop()
弹出并返回array
数组的最后一个单元,并将数组array
的长度减一。参数:
- array
需要弹出栈的数组。
返回值:
返回
array
的最后一个值,如果array
为空(如果不是一个数组),将会返回NULL
。【示例】
<?php $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_pop($stack); print_r($stack); ?>
程序输出结果:
- array
其他常用数组函数
-
array_slice()
函数
该函数从数组中取出一段。
说明:
array_slice(array $array, int $offset[, int $length = NULL[, bool $preserve_keys = false]]):array
array_slice()
返回根据offset
和length
参数所指定的array
数组中的一段序列。参数:
- array
输入的数组。 - offset
如果该值为非负,则序列将从数组中的此偏移量开始。如果该值为负,则序列将从数组中距离末端这么远的地方开始。 - length
如果给出了length
并且为正,则序列中将具有这么多的单元。如果给出了length
并且为负,则序列将终止在距离数组末端这么远的地方。如果省略,则序列将从offset
开始一直到array
的末端。 - preserve_keys
array_slice()
默认会重新排序并重置数组的数字索引。可以通过将preserve_keys
设为TRUE
来改变此行为。
返回值:
返回其中一段。如果
offset
参数大于array
尺寸,就会返回空的array
。【示例】
<?php echo "<pre>"; $input = array("a", "b", "c", "d", "e"); $output = array_slice($input, 2); // 返回"c","d"和"e" $output = array_slice($input, -2, 1); // 返回"d" $output = array_slice($input, 0, 3); // 返回"a","b"和"c" // 注意一下两个返回数组的键名 print_r(array_slice($input, 2, -1)); print_r(array_slice($input, 2, -1, true)); ?>
程序输出结果:
- array
-
array_splice()
函数
该函数可以把数组的一部分去掉并用其他值取代。
说明:
array_splice(array &$input, int $offset[, int $length = count($input)[, mixed $replacement = array()]]):array
把
input
数组中由offset
和length
指定的单元去掉,如果提供了replacement
参数,则用其中的单元取代。**input
**中的数字键名将不被保留。如果replacement
不是数组,会被类型转换成数组。当传入的replacement
是个对象或者NULL
,会导致未知行为出现。参数:
- input
输入的数组。 - offset
如果offset
为正,则从input
数组中该值指定的偏移量开始移除。如果offset
为负,则从input
末尾到该数值指定的偏移量开始移除。 - length
如果省略了length
,则移除数组中从offset
到结尾的所有部分。如果指定了length
并且为正值,则移除length
个单元。如果length
为负值,则移除从offset
到数组末尾倒数length
为止中间所有的单元。如果length
为零,不会移除单元。小窍门:当给出了replacement
时要移除从offset
到数组末尾所有单元时,用count($input)
作为length
。 - replacement
如果给出了replacement
数组,则被移除的单元被此数组中的单元替代。如果offset
和length
的组合结果是不会移除任何值,则replacement
数组中的单元将被插入到offset
指定的位置。注意替换数组中的键名不保留。如果用来替换replacement
只有一个单元,那么不需要给它加上array()
,除非该单元本身就是一个数组,一个对象或者NULL
。
返回值:
返回一个包含有被移除单元的数组。
【示例】
<?php echo "<pre>"; $input = array("red", "green", "blue", "yellow"); array_splice($input, 2); print_r($input); // $input现在是array("red", "green") $input = array("red", "green", "blue", "yellow"); array_splice($input, 1, -1); print_r($input); // $input现在是array("red", "yellow"); $input = array("red", "green", "blue", "yellow"); array_splice($input, 1, count($input), "orange"); print_r($input); // $input现在是array("red", "orange"); $input = array("red", "green", "blue", "yellow"); array_splice($input, -1, 1, array("black", "maroon")); print_r($input); // $input现在是array("red", "green", "blue", "black", "maroon") $input = array("red", "green", "blue", "yellow"); array_splice($input, 3, 0, "purple"); print_r($input); // $input现在是array("red", "green", "blue", "purple", "yellow") ?>
程序输出结果:
- input
-
is_array()
函数
该函数检测变量是否为数组。
说明:
is_array(mixed $var):bool
如果
var
是数组,则返回TRUE
,否则返回FALSE
。
【示例】略 -
array_sum()
函数
该函数计算数组中所有值的和。
说明:
array_sum(array $array):number
array_sum()
将数组中所有值的和以整数或浮点数的结果返回。array_sum()
计算数组元素的和时,普通字符串被当做0,而数字类型字符串会转换成相应整型或浮点型参与计算。
参数:
- array
输入的数组。
返回值:
所有值的和以整型或浮点型的结果返回,
array
为空则返回0。【示例】
<?php $a = array('b', 2, 4,'2', 6, 8); echo "sum(a) = " . array_sum($a) . "<br />"; $b = array("a"=>1.2, "b"=>2.3, "c"=>3.4); echo "sum(b) = " . array_sum($b) . "<br />"; ?>
程序输出结果:
可以看出
$a
中第一个单元’b’被转换为了0,而第四个单元’2’被转换成了整数2。 - array
-
array_product()
函数
该函数用来计算数组中所有值的乘积并返回。函数的用法同array_sum()
类似,此处不再累述。 -
array_flip()
函数
该函数用来交换数组中的键和值。
说明:
array_flip(array $array):array
array_flip()
返回一个反转后的array
,例如array
中的键名变成了值,而array
中的值成了键名。注意array
中的值需要能够作为合法的键名(例如需要是integer
或者string
)。如果类型不对,将出现一个警告,并且有问题的键/值对将不会出现在结果里。如果同一个值出现多次,则最后一个键名将作为它的值,其它键会被丢弃。参数:
- array
要交换键/值对的数组。
返回值:
成功时返回交换后的数组,如果失败返回
NULL
。【示例】
<?php $input = array("oranges", "apples", "pears"); $flipped = array_flip($input); print_r($flipped); ?>
程序输出结果:
【示例2】
<?php $input = array("a"=>1, "b"=>1, "c"=>2); $flipped = array_flip($input); print_r($flipped); ?>
程序输出结果:
- array