首先要了解一下什么是数组
数组就是一组数据的集合,把一系列的数据组织起来,形成一个可以操作的整体
如果说变量时储存单个值的容器,那么数组就是储存多个值的容器。
PHP数组分为三类:数字索引数组,关联数组,多维数组
数字索引数组:索引数组存储一系列经过组织的单个或多个值,其中的每个值都可以通过使用一个无符号整数值进行访问。
关联数组:键为字符串,或字符串与数字混合都为关联数组。
多维数组:一个数组的值可以使另一个数组,另一个数组的值也可以是一个数组。依照这种方式,我们可以创建二维或三维数组。
array_fill 用给定的值填充数组
语句结构:
array_fill(int $start_index,int $num,mixed value)
Array_fill():用value参数的值将一个数组填充num个条目,键名有star_index参数指定的开始。
<?php
$a = array_fill ( 5 , 6 , 'banana' );
$b = array_fill (- 2 , 4 , 'pear' );
print_r ( $a );
print_r ( $b );
?>
结果:
Array | |
( | |
[5] => banana | |
[6] => banana | |
[7] => banana | |
[8] => banana | |
[9] => banana | |
[10] => banana | |
) | |
Array | |
( | |
[-2] => pear | |
[0] => pear | |
[1] => pear | |
[2] => pear | |
) |
unset:释放给定的变量(销毁)(内存可以回收)
unset():在函数中的行为会依赖于想要销毁的变量的类型而有所不同。
- unset($a[2]) 指定数组$a中下表为2的元素删除
- 如果在函数中unser()一个全局,则只是局部变量被销毁,而在调用环境中的变量将保持调用unset()之前一样的值
<?php
function destroy_foo(){
global $foo;//全局
unset ($foo);
}
$foo='boo';
destroy_foo();
echo $foo;
?>
结果:
boo
- 如果想要在函数中unset()一个全局变量,可使用$GLOBALS数组实现
-
如果在函数中 unset() 一个通过引用传递的变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。
<?php
function foo (& $bar ) {
unset( $bar );
$bar = "blah" ;
}
$bar = 'something' ;
echo " $bar \n" ; //echo something
foo ( $bar );
echo " $bar \n" ; //echo something
?>
- 如果在函数中 unset() 一个静态变量,那么在函数内部此静态变量将被销毁。但是,当再次调用此函数时,此静态变量将被复原为上次被销毁之前的值。
<?php
function foo ()
{
static $bar ;
$bar ++;
echo "Before unset: $bar , " ;
unset( $bar );
$bar = 23 ;
echo "after unset: $bar \n" ;
}
foo (); //Before unset:1,agter unset:23
foo (); //Before unset:2,agter unset:23
foo (); //Before unset:3,agter unset:23
?>
array_splice 把数组中的一部分去掉并用其他取代
语法结构:
array array_splice(array $input,int $offset[,int $length[,mixed $replacement]])
把input数组中由offset和length指定的单元去掉,如果提供了replacement参数,则用其中的单元取代
注意:input中的数字键名不被保留。
- input:输入的数组
- offset:如果offset为正,则从input数组中该值指定的偏移量开始移除。如果offset为负,则从input末尾倒数该值指定的便宜凉戴氏移除。、
- length:如果省略length,则移除数组中从offset到结尾的所有部分。如果指定了length并且为正值,则移除这么多单元。如果制定了length并且为负值,则移除从offset到数组末尾倒数length为值中间所有的单元。小窍门:当给出了replacement时要移除从offset到数组末尾所有单元时,用count($input)作为length。
- replacement:如果给出了replacement数组,则被移除的单元被此数组中的单元替代。如果offset和length的组合结果是不会移除任何值,则replacement数组中的单元经被插入到offset指定的位置。注意替换数组中的键名不保留。如果用来替换replacement只有一个单元,那么不需要给它加上array(),除非该单元本身就是一个数组、一个对象或者null。
<?php
$input = array( "red" , "green" , "blue" , "yellow" );
array_splice ( $input , 2 );
// $input is now array("red", "green")
$input = array( "red" , "green" , "blue" , "yellow" );
array_splice ( $input , 1 , - 1 );
// $input is now array("red", "yellow")
$input = array( "red" , "green" , "blue" , "yellow" );
array_splice ( $input , 1 , count ( $input ), "orange" );
// $input is now array("red", "orange")
$input = array( "red" , "green" , "blue" , "yellow" );
array_splice ( $input , - 1 , 1 , array( "black" , "maroon" ));
// $input is now array("red", "green",
// "blue", "black", "maroon")
$input = array( "red" , "green" , "blue" , "yellow" );
array_splice ( $input , 3 , 0 , "purple" );
// $input is now array("red", "green",
// "blue", "purple", "yellow");
?>
range 建立一个包含指定范围单元的数组
语句结构:
array range(mixed $start,mixed $limite[,number $step=1])
- start:序列的第一个值
- limit:序列结束于limit的值
- step:如果给出了setp的值,它将被作为单元之间的步进值。step应该为正值。如果未指定,step则默认为1
返回值的数组中从start到limit的单元,包括它们本身
<?php
// array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
foreach ( range ( 0 , 12 ) as $number ) {
echo $number ;
}
// array('c', 'b', 'a');
foreach ( range ( 'c' , 'a' ) as $letter ) {
echo $letter ;
}
?>
array_merge 合并一个或多个数组
语句结构:
array array_merge ( array
$array1
[, array$...
] )
array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
<?php
$array1 = array( "color" => "red" , 2 , 4 );
$array2 = array( "a" , "b" , "color" => "green" , "shape" => "trapezoid" , 4 );
$result = array_merge ( $array1 , $array2 );
print_r ( $result );
?>
结果:
Array ( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4 )
数字键名将会被重新编导
如果你想完全保留原有数组并且只想新的数组附加到后面,用'+'运算符
array_rand 从数组中随机取出一个或多个单元
语句结构:
mixed array_rand( array
$input
[, int$num_req
= 1 ] )
input:输入的数组
num_req:指明了你想取出多少个单元。如果指定的数目超过了数组里的数量将会产生一个E_WARNING级别的错误。
若返回一个,则返回的是一个键值
若返回多个,则返回一个数组。(将多个元素的数组组合,构成新数组)
<?php
$a=array("red","green","blue","yellow","brown");
$random_keys=array_rand($a,3);
echo $a[$random_keys[0]]."<br>";
echo $a[$random_keys[1]]."<br>";
echo $a[$random_keys[2]];
?>
输出结果:
blue
yellow
brown
array_combine 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
语句结构:
array array_combine ( array
$keys
, array$values
)
返回一个数组,用来自 keys
数组的值作为键名,来自 values
数组的值作为相应的值。
<?php
$fname=array("Bill","Steve","Mark");
$age=array("60","56","31");
$c=array_combine($fname,$age);
print_r($c);
?>
输出结果:
Array ( [Bill] => 60 [Steve] => 56 [Mark] => 31 )
explode 使用一个字符串分割另一个字符串
语句结构:
array explode ( string
$delimiter
, string$string
[, int$limit
] )
- delimiter:边界上的分割字符
- string:输入的字符串
- limit:如果设置了limit参数并且是正数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含string的剩余部分。如果 limit 参数是负数,则返回除了最后的 - limit 个元素外的所有元素。如果 limit 是 0,则会被当做 1。
<?php
// 示例 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6" ;
$pieces = explode ( " " , $pizza );
echo $pieces [ 0 ]; // piece1
echo $pieces [ 1 ]; // piece2
// 示例 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh" ;
list( $user , $pass , $uid , $gid , $gecos , $home , $shell ) = explode ( ":" ,
$data );
echo $user ; // foo
echo $pass ; // *
?>
implode 连接数组元素 返回字符串类型
语句结构:
implode(连接数组)
<?php
$array = array( 'lastname' , 'email' , 'phone' );
$comma_separated = implode ( "," , $array );
echo $comma_separated ; // lastname,email,phone
?>
array_map 将回调函数作用到给定数组的单元上
语句结构:
array array_map (callable $
callback
, array$arr1
[, array$...
] )
array_map() 返回一个数组,该数组包含了arr1中的所有单元经过callback作用过之后的单元。 callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
<?php
function cube ( $n )
{
return( $n * $n * $n );
}
$a = array( 1 , 2 , 3 , 4 , 5 );
$b = array_map ( "cube" , $a );
print_r ( $b );
?>
输出结果:
Array ( [0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125 )
我列出的函数差不多是常用的,当然还有其他的函数,如果有兴趣可以点击下面的连接继续学习。