好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php 数组操作函数学习笔记 - php数组

php 数组操作函数学习笔记

在php中数组是我们开发应用中不可少的了部份,下面我来把我自己学习php数组的一些操作给各位同学分享一下,希望有需要了解的同学可进入参考。

对于Web编程来说,最重要的就是存取和读写数据了。存储方式可能有很多种,可以是字符串、数组、文件的形式等。数组,可以说是PHP的数据应用中较重要的一种方式。PHP的数组函数众多,下面是我学习的小结,借此记之,便于以后鉴之。

. 数组定义

数组的定义使用 array()方式定义,可以定义空数组,代码如下:

<?php  $number  =  array (1,3,5,7,9);    //定义空数组     $result  =  array ();    $color  = array ( "red" , "blue" , "green" );    //自定义键值     $language  = (1=> "English" ,3=> "Chinese" ,5=> "Franch" );    //定义二维数组     $two  =  array (    "color" => array ( "red" , "blue" ),  //用逗号结尾     "week" => array ( "Monday" , "Friday" )  //最后一句没有标点     );    ?>  

创建数组

compact()  

compact()函数——将一个或多个变量(包含数组)转换为数组:array compact ( mixed $varname [, mixed $... ] )。 

实例代码如下:

<?php  $number  =  "1,3,5,7,9" ;    $string  =  "I'm PHPer" ;    $array  =  array ( "And" , "You?" );    $newArray  = compact( "number" , "string" , "array" );    print_r ( $newArray );    ?> 

ompact()函数用于将两个或多个变量转换为数组,当然也包含数组变量。其参数是变量的名称而非带有$全名。相反的函数是extract()作用顾名思义就是将数组转换为单个的字符串,键值作为其字符串名称,数组值作为字符串的值。 

运行结果:

Array (   [number] = >  1,3,5,7,9   [string] = >  I'm PHPer   [array] = >  Array ( [0] = >  And [1] = >  You? )   ) 

array_combine() 

array_combine()——将两个数组重组成一个数组,一个作键值一个做的值:array array_combine ( array $keys , array $values )

代码如下:

<?php  $number  =  array ( "1" , "3" , "5" , "7" , "9" );    $array  =  array ( "I" , "Am" , "A" , "PHP" , "er" );    $newArray  =  array_combine ( $number , $array );    print_r ( $newArray );    ?> 

array_combine函数不多说了,谁看了都明白。 

运行结果:

Array ( [1] => I [3] => Am [5] => A [7] => PHP [9] => er ) 

range() 

range()函数——创建指定范围的数组,代码如下:

<?php  $array1  = range(0,100,10); //0为起始值,100为结束值,10为步进值(默认步进值为1).     print_r( $array1 );    echo "" ;    $array2  = range( "A" , "Z" );    print_r( $array2 );    echo   "" ;    $array3  = range( "z" , "a" );    print_r( $array3 );    ?> 

array_fill() 

array_fill()函数——填充数组函数,代码如下:

<?php  $array  = range(1,10);    $fillarray  = range( "a" , "d" );    $arrayFilled  =  array_fill (0,5, $fillarray ); //这里的$fillarray可以是字符串,如"test".     echo  "  ";    print_r ( $arrayFilled );    echo   "" ;    $keys  =  array ( "string" , "2" ,9, "SDK" , "PK" );    $array2  = array_fill_keys( $keys , "testing" );    echo  "  ";    print_r ( $array2 );    echo   "" ;    ?> 

运行结果:

Array   (   [0] = >  Array   (   [0] = >  a   [1] = >  b   [2] = >  c   [3] = >  d   )  [1] = >  Array   (   [0] = >  a   [1] = >  b   [2] = >  c   [3] = >  d   )  [2] = >  Array   (   [0] = >  a   [1] = >  b   [2] = >  c   [3] = >  d   )  [3] = >  Array   (   [0] = >  a   [1] = >  b   [2] = >  c   [3] = >  d   )  [4] = >  Array   (   [0] = >  a   [1] = >  b   [2] = >  c   [3] = >  d   )  )   Array   (   [string] = >  testing   [2] = >  testing   [9] = >  testing   [SDK] = >  testing   [PK] = >  testing   ) 

数组的遍历 

foreach遍历 

foreach (array_expression as $value){} 

foreach (array_expression as $key => $value){}

实例代码如下:

$speed  =  array (50,120,180,240,380);    foreach ( $speed   as   $keys => $values ){    echo   $keys . "=>" . $values . "" ;    } 

运行结果:

0 = > 50   1 = > 120   2 = > 180   3 = > 240   4 = > 380 

while循环遍历

while循环遍历一般结合list函数,以下是实例,代码如下:

<?php  $staff  =  array (    array ( "姓名" , "性别" , "年龄" ),    array ( "小张" , "男" ,24),    array ( "小王" , "女" ,25),    array ( "小李" , "男" ,23)    );    echo   "" ;    while (list( $keys , $value ) = each( $staff )){    list( $name , $sex , $age ) =  $value ;    echo   "$name$sex$age" ;    }    echo   "" ;    ?> 

for循环遍历

实例代码如下:

<?php  $speed  = range(0,220,20);    for ( $i  =0; $i < count ( $speed ); $i ++) {    echo   $speed [ $i ]. " " ;    }    ?> 

运行结果:0 20 40 60 80 100 120 140 160 180 200 220 

数组的指针操作

涉及函数包括reset、prev、end、next、current、each。 

实例一:next 与 prev,代码如下:

<?php  $speed  = range(0,220,20);    echo  current( $speed ); //输出当前位置的值(在数组的开头位置)     $i  = rand(1,11);    while ( $i --){    next( $speed ); //指针从当前位置向后移动一位     }    echo  current( $speed ); //输出当前位置的值     echo   "" ;    echo  prev( $speed ); //输出前一位置数组值     echo   "" ;    echo  reset( $speed ); //重置数组的指针,将指针指向起始位置     echo   "" ;    echo   end ( $speed ); //输出最后位置的数组值     echo   "" ;    ?> 

运行结果: 

0220 200 0 220 

实例二:each函数指针操作,代码如下:

<?php  $speed  = range(0,200,40);    echo   "each实现指针下移 " ;    echo   "0挡的速度是" .current(each( $speed )). "" ;    echo   "1挡的速度是" .current(each( $speed )). "" ;    echo   "2挡的速度是" .current(each( $speed )). "" ;    echo   "3挡的速度是" .current(each( $speed )). "" ;    echo   "4挡的速度是" .current(each( $speed )). "" ;    echo   "5挡的速度是" .current(each( $speed )). "" ;    echo   "使用each函数实现数组指针的移动,进行数组遍历 " ;    reset( $speed ); //这里是将数组指针指向数组首     while (list( $key , $value )=each( $speed )){    echo   $key . "=>" . $value . "" ;    }    ?> 

运行结果: 

each实现指针下移 

0挡的速度是0 

1挡的速度是40 

2挡的速度是80 

3挡的速度是120 

4挡的速度是160 

5挡的速度是200 

使用each函数实现数组指针的移动,进行数组遍历

0 = > 0   1 = > 40   2 = > 80   3 = > 120   4 = > 160   5 = > 200 

数组的增添删改操作 

增添数组成员 

实例一:$num[] = value直接赋值追加到数组末尾,实例代码如下:

<?php  $num  =  array (1=>80,2=>120,3=>160);    echo   "使用表达式添加数组成员" ;    $num []=240;    print_r( $num );    ?> 

运行结果: 

使用表达式添加数组成员 

Array ( [0] => 80 [1] => 120 [2] => 160 [3] => 240 ) 

实例二:array_pad函数,数组数组首尾选择性追加,代码如下:

<?php  $num  =  array (1=>80,2=>120,3=>160);    $num  =  array_pad ( $num ,4,200);    echo   "使用array_pad函数向数组尾部添加成员" ;    print_r( $num );    echo   "array_pad 还可以填充数组首部" ;    $num  =  array_pad ( $num ,-8,40);    print_r( $num );    ?> 

运行结果: 

使用array_pad函数向数组尾部添加成员 

Array ( [0] => 80 [1] => 120 [2] => 160 [3] => 200 ) 

array_pad 还可以填充数组首部 

Array ( [0] => 40 [1] => 40 [2] => 40 [3] => 40 [4] => 80 [5] => 120 [6] => 160 [7] => 200 )

实例三:入栈操作追加(array_push),代码如下:

<?php  $num  =  array (1=>80,2=>120,3=>160);    array_push ( $num ,200,240,280); //可以自己追加,直接加在数组结尾     print_r( $num );   ?> 

运行结果: 

Array ( [1] => 80 [2] => 120 [3] => 160 [4] => 200 [5] => 240 [6] => 280 ) 

实例四:array_unshift()在开头添加数组成员,代码如下:

<?php  $num  =  array (1=>80,2=>120,3=>160);    array_unshift ( $num ,0,40); //可以自己追加,直接加在数组结尾     print_r( $num );  ?>

运行结果: 

Array ( [0] => 0 [1] => 40 [2] => 80 [3] => 120 [4] => 160 ) 

注意:array_unshift()函数使用后数组的键值将会从0开始! 

删减数组成员

实例一:unset()命令删除数组成员或数组,代码如下:

<?php  $num  =  array_fill (0,5,rand(1,10));    print_r( $num );    echo   "" ;    unset( $num [4]);    print_r( $num );    echo   "" ;    unset( $num );    if ( is_array ){    echo   "unset命令不能删除整个数组" ;    } else {    echo   "unset命令可以删除数组" ;    }   ?> 

运行结果:(运行出错及说明数组也被删除,不再存在) 

Array ( [0] => 9 [1] => 9 [2] => 9 [3] => 9 [4] => 9 ) 

Array ( [0] => 9 [1] => 9 [2] => 9 [3] => 9 )

unset命令不能删除整个数组 

实例二:array_splice()函数删除数组成员,代码如下:

$a = array ( "red" ,  "green" ,  "blue" ,  "yellow" );    count  ( $a );  //得到4     array_splice ( $a ,1,1);  //删除第二个元素     count  ( $a );  //得到3     echo   $a [2];  //得到yellow     echo   $a [1];  //得到blue    

实例三:array_unique删除数组中的重复值,代码如下:

<?php  $a = array ( "red" ,  "green" ,  "blue" ,  "yellow" , "blue" , "green" );    $result  =  array_unique ( $a );    print_r( $result );    ?> 

运行结果: 

Array ( [0] => red [1] => green [2] => blue [3] => yellow ) 

实例四:array_merge、array_merge_recursive合并数组,代码如下:

<?php  $array1  =  array ( "r" => "red" ,1,2,3,4);    $array2  =  array ( "b" => "blue" ,4=>5,6,7,8,9);    $array3  =  array ( "r" => "read" ,4=>10,2=>11);    $array4  =  array (    array (4=>10),    array (7=>13)    );    $array5  =  array (    array (4=>11),    array (6=>12)    );    $result  =  array_merge ( $array1 , $array2 , $array3 , $array4 , $array5 );    echo  "  ";    print_r( $result );    echo   "" ;    $result  =  array_merge_recursive ( $array1 , $array2 , $array3 , $array4 , $array5 );    echo  "  ";    print_r ( $result );    echo   "" ;    ?>  

运行结果:

Array   (   [r] = >  read   [0] = >  1   [1] = >  2   [2] = >  3   [3] = >  4   [b] = >  blue   [4] = >  5   [5] = >  6   [6] = >  7   [7] = >  8   [8] = >  9   [9] = >  10   [10] = >  11   [11] = >  Array   (   [4] = >  10   )  [12] = >  Array   (   [7] = >  13   )  [13] = >  Array   (   [4] = >  11   )  [14] = >  Array   (   [6] = >  12   )  )   Array   (   [r] = >  Array   (   [0] = >  red   [1] = >  read   )  [0] = >  1   [1] = >  2   [2] = >  3   [3] = >  4   [b] = >  blue   [4] = >  5   [5] = >  6   [6] = >  7   [7] = >  8   [8] = >  9   [9] = >  10   [10] = >  11   [11] = >  Array   (   [4] = >  10   )  [12] = >  Array   (   [7] = >  13   )  [13] = >  Array   (   [4] = >  11   )  [14] = >  Array   (   [6] = >  12   )  ) 

注:1. array_merge的键名是数字的将重新建立索引;遇到相同的字符串键名时,后面的将覆盖前面的。 2. array_merge_recursive函数的作用是将相同字符串的键名单元整合成一个数组。 

数组的键值和值操作 

实例一:in_array()检测数组中是否有某个值存在,代码如下:

$array  = range(0,9);    if (in_array(9, $array )){    echo   "数组中存在" ;    }  

运行结果:数组中存在 

实例二:key()取得数组当前的键名,代码如下:

<?php  $array  = range(0,9);    $num  = rand(0,8);    while ( $num --)    next( $array );    $key  = key( $array );    echo   $key ;    ?>  

此实例结果为动态结果,范围(0-8),不做结果演示。 

实例三:list()函数把数组中的值赋给指定变量,代码如下:

<?Php  $staff  =  array (    array ( "姓名" , "性别" , "年龄" ),    array ( "小张" , "男" ,24),    array ( "小王" , "女" ,25),    array ( "小李" , "男" ,23)    );    echo   "" ;    while (list( $keys , $value ) = each( $staff )){    list( $name , $sex , $age ) =  $value ;    echo   "$name$sex$age" ;    }    echo   "" ;    ?> 

实例四:array_flip()交换数组的键值和值,代码如下:

<?Php  $array  =  array ( "red" , "blue" , "yellow" , "Black" );    print_r( $array );    echo   "" ;    $array  =  array_flip ( $array );    print_r( $array );    ?>   //运行结果:    //Array ( [0] => red [1] => blue [2] => yellow [3] => Black )    //Array ( [red] => 0 [blue] => 1 [yellow] => 2 [Black] => 3 )  

代码如下:

<?php  $array  =  array ( "red" , "blue" , "yellow" , "Black" );    $result  =  array_keys ( $array );    print_r( $result );    echo   "" ;    $result  =  array_values ( $array );    print_r( $result );    ?>   //运行结果:    //Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 )    //Array ( [0] => red [1] => blue [2] => yellow [3] => Black )  

实例六:array_search()搜索数值,代码如下:

<?php  $array  =  array ( "red" , "blue" , "yellow" , "Black" );    $result  =  array_search ( "red" , $array );    if (( $result  === NULL)){    echo   "不存在数值red" ;    } else {    echo   "存在数值 $result" ;    }    ?>   //结果:存在数值 0  

函数array_search()返回的值可能为false或0或NULL,所以在判断时注意要用"===" 

数组的排序

实例一:sort()、rsort()/asort()、arsort()对数组排序,代码如下:

<?php  $array  =  array ( "b" , "c" , "d" , "a" );    sort( $array ); //从低到高排序     print_r( $array );    echo   "" ;    rsort( $array ); //逆向排序     print_r( $array );    ?>   //结果:    //Array ( [0] => a [1] => b [2] => c [3] => d )    //Array ( [0] => d [1] => c [2] => b [3] => a )  

sort()、rsort()函数对数组进行从低到高的排序,返回结果为bool值;

asort()、arsort()函数是保留键值的排序,排序后键值不重新索引。 

实例二:将数组顺序打乱——shuffle()函数,代码如下:

<?php  $array  =  array ( "a" , "b" , "c" , "d" );    shuffle( $array ); //从低到高排序     print_r( $array );    ?>   //结果为动态结果:    //Array ( [0] => c [1] => a [2] => d [3] => b )  

shuffle的结果有点随机的意味,每次刷新都不一样。 

实例三:array_reverse()数组反向,代码如下:

<?php  $array  =  array ( "d" , "b" , "a" , "c" );    $array  =  array_reverse ( $array ); //从低到高排序     print_r( $array );    ?>   //运行结果:    //Array ( [0] => c [1] => a [2] => b [3] => d )  

实例四:自然排序算法——natsort()和natcasesort();代码如下:

<?php  $array  =  array ( "sort2" , "Sort5" , "sort1" , "sort4" );    natsort( $array ); //从低到高排序     print_r( $array );    echo   "" ;    natcasesort( $array );    print_r( $array );    ?>   //结果:    //Array ( [1] => Sort5 [2] => sort1 [0] => sort2 [3] => sort4 )    //Array ( [2] => sort1 [0] => sort2 [3] => sort4 [1] => Sort5 )  

natsort()、natcasesort()对数组进行自然排序,就是使用数字的正常排序算法。natcasesort会忽略大小写。 

实例五:对数组进行键值排序ksort(),代码如下:

<?php  $array  =  array (1=> "sort2" ,4=> "Sort5" ,2=> "sort1" ,3=> "sort4" );    ksort( $array ); //从低到高排序     print_r( $array );    ?>   //结果:    //Array ( [1] => sort2 [2] => sort1 [3] => sort4 [4] => Sort5 )   

注意:ksort()函数重新建立了索引。

数组的其他用法

代码如下:

array  =  array  ( 'A' ,  'B' ,  'C'  );    //使用int array_unshift(array $array,mixed variable[,mixed variable…])在数组头添加元素     array_unshift  (  $array ,  'E' ,  'F' ,  'G'  );    var_dump (  $array  );    $array  =  array  ( 'A' ,  'B' ,  'C'  );    //使用int array_push(array $array,mixed variable[,mixed variable…])在数组结尾添加元素     array_push  (  $array ,  'E' ,  'F' ,  'G'  );    var_dump (  $array  );    $array  =  array  ( 'A' ,  'B' ,  'C'  );    //使用mixed array_shift(array $array)在数组头删除元素     array_shift  (  $array  );    var_dump (  $array  );    $array  =  array  ( 'A' ,  'B' ,  'C'  );    //使用mixed array_pop(array $array)在数组尾删除元素     array_pop  (  $array  );    var_dump (  $array  );   /*     * 在数组中搜索一个特定值,如果找到返回TRUE否则返回FALSE       * boolean in_array(mixed needle,array haystack[,boolean strict])     * 在数组中找到一个指定的健,如果找到返回TRUE否则返回FALSE     * boolean array_eky_exists(mixed key,array array)     * 在数组中搜索一个特定值,如果找到返回TRUE否则返回FALSE     * boolean array_search(mixed needle,array haystack[,boolean strict])     * 获取数组所有键组成的新数组     * array array_keys(array array[,mixed search_value])     * 获取数组所有值组成的新数组     * array array_values(array array)     * 确定数组大小     * integer count(array array[,int mode])     * integer sizeof(array array[,int mode])     * 统计数组元素出现频率     * array array_count_values(array array)     * 删除数组中重复的值,返回一个由唯一值组成的数组     * array array_unique(array array)     * 逆置数组元素顺序,preserve_key如果为TRUE则数组键值顺序不变     * array array_reverse(array array[,boolean preserve_key])     * 置换数组键和值     * array array_flip(array array)     * 数组顺序排序,sort_flags参数可选,默认行为     * SORT_NUMBERIC,按数值排序,对整数或浮点数排序很有用     * SORT_REGULAR,按照ASCII值排序     * SORT_STRING,按接近人所认识的正确顺序排序     * asort函数键值顺序不变     * void sort(array array[,int sort_flags])     * void asort(array array[,int sort_flags])     * 数组逆序排序,sort_flags参数可选,默认行为     * SORT_NUMBERIC,按数值排序,对整数或浮点数排序很有用     * SORT_REGULAR,按照ASCII值排序     * SORT_STRING,按接近人所认识的正确顺序排序     * arsort函数键值顺序不变     * void rsort(array array[,int sort_flags])     * void arsort(array array[,int sort_flags])     * 数组自然排序     * void natsort(array array)     * 不区分大小写的自然排序     * void natcasesort(array array)     * 健键值对数组排序     * boolean ksort(array array[,int sort_flags])     * 健键值对数组逆序排序     * boolean krsort(array array[,int sort_flags])     * 根据用户自定义顺序排序     * void usort(array array,callback function_name)     * 将数组合并到一起,返回一个联合的数组。array_merge后面覆盖前面,array_merge_recursive合并在一起     * array array_merge(array array1[array array2……])//一个以上     * array array_merge_recursive(array array1,array array2[,array ……])//两个以上     * 键和值组成新的数组     * array array_combine(array key,array value)     * 返回数组一部分,从健offset开始,到offse+length位置结束     * array array_slice(array array, int offset [,int length])     * 删除从offset开始到offset+length结束的所有元素,并以数组的形式返回删除的元素     * array array_splice(array, int offset [,int length[,array peplacement]])     * 求数组的交集,键值为第一个数组中键值     * array array_intersect(array array1,array array2[,arrayN……])     * 求数组的交集包含了键值相等,键值为第一个数组中键值     * array array_intersect_assoc(array array1,array array2[,arrayN……])     * 求数组的差集,第一个数组在其他数组没有的值     * array array_diff(array array1,array array2[,arrayN……])     * 求数组的差集,第一个数组在其他数组没有的值包含了键值相等     * array array_diffassoc(array array1,array array2[,arrayN……])     * 返回数组中一个或多个键值     * mixed array_rand(array array[,int num_entries])     * 随即洗牌函数     * void shuffle(array input_array)     * 对数组中的值求和     * mixed array_sum(array array);     * 将数组分解为一个多维数组,它包含了size个元素     * array array_chunk(array array, int size [,boolean preserve_keys])     */   

查看更多关于php 数组操作函数学习笔记 - php数组的详细内容...

  阅读:37次