数组中常用的函数

本文深入讲解PHP中的数组概念,包括数字索引数组、关联数组和多维数组,并详细介绍了数组操作函数如array_fill、unset、array_splice等的使用方法及实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先要了解一下什么是数组

数组就是一组数据的集合,把一系列的数据组织起来,形成一个可以操作的整体

如果说变量时储存单个值的容器,那么数组就是储存多个值的容器。

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
)

我列出的函数差不多是常用的,当然还有其他的函数,如果有兴趣可以点击下面的连接继续学习。

http://www.php.cn/course/25.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值