在PHP应用中,数组是用得最广泛的数据结构了。基本可以这么说,熟练掌握数组你就可以熟练掌握PHP的大部分了。下面将PHP的数组操作进行汇总介绍下,或许有你不懂或不怎么了解的数组操作。
将数组的内部指针倒回一位:
01 | /** |
02 | * 将数组的内部指针倒回一位 |
03 | * @param array &$arr |
04 | * @return mixed 返回前一个单元的值,当没有更多单元时返回 FALSE |
05 | * 如果数组包含空的单元,或者单元的值是 0 则本函数碰到这些单元也返回 FALSE |
06 | * 要正确遍历可能含有空单元或者单元值为 0 的数组,参见 each() 函数 |
07 | */ |
08 | mixed prev( array & $arr ); |
09 |
10 | <?php |
11 | $transport = array ( 'foot' , 'bike' , 'car' , 'plane' ); |
12 | $mode = current( $transport ); // $mode = 'foot'; |
13 | $mode = next( $transport ); // $mode = 'bike'; |
14 | $mode = next( $transport ); // $mode = 'car'; |
15 | $mode = prev( $transport ); // $mode = 'bike'; |
16 | $mode = end ( $transport ); // $mode = 'plane'; |
17 | $mode = reset( $transport ) ; //$mode = 'foot'; |
18 |
19 | ?> |
把数组中的单元转换为变量:
1 | array ( "key" => "value" );建立数组 |
2 | //显示数组 |
3 | print_r( $array ); |
4 | //使用compact()函数新建数组,并把参数做为新数组的单元; |
5 | $newArray = compact( "red" , "green" , "yellow" , "blue" , "array" ); |
6 | //使用extract()函数把数组中的单元转换为变量 |
7 | extract( $exArray ); |
8 | echo "$key1 $key2 $key3 $key4 $key5" ; |
检查值、键:
1 | array_key_exists ( $key , $array ); //检查数组键 |
2 | in_array( $value , $array ); //检查值于数组 |
获取值:
1 | //使用array_values()取得数组的值 |
2 | $carValues = array_values ( $car ); |
3 | //取出数组的键名 |
4 | $twoKeys = array_keys ( $two ); |
5 | key( $array ); //输出当前单元的键名 |
6 | //数组定义后,使用current()取得当前单元的值 |
7 | $red = current( $array ); |
8 | list( $red , $green ) = $array ; //把数组中的值赋与变量,$array = array("红色","绿色"); |
9 | each( $two ); //返回数组中当前单元的键和值 |
遍历数组:
1 | foreach ( $two as $subArray ); //遍历数组 |
2 | while (list( $key , $value ) = each( $array )){ |
3 | echo "$key=>$value," ; //使用each遍历数组 |
4 | } |
填充数组:
01 | //向左、右填充数组 |
02 | array_pad ( $array ,+3, "shuzhi" ); //2参数为正从左往右填充,数值大于单元数时才填充 |
03 | $array1 = array_fill (5,5, "test" ); //使用array_fill()填充这个数组的值,值为test,从第5个单元开始填充,一共填充5个单元 |
04 | //填充数组键名 |
05 | $keys = array ( 'string' , 5, 10, 'str' ); |
06 | $array3 = array_fill_keys( $keys , "数组值" ); |
07 | //使用array_filp()函数交换键名与值 |
08 | $speed = array_flip ( $speed ); |
09 | //使用array_splice()函数替换第6个单元的值为7 |
10 | $output = array_splice ( $input ,6,0,7); |
11 | //使用array_splice()函数删除数组单元,只保留前5个单元 |
12 | $output = array_splice ( $input ,5); |
13 | $array1 = range(10,100,10); //使用range()函数的第三个参数,设置单元之间的步进值 |
排序:
01 | shuffle( $array ); //将数组顺序打乱 |
02 | //使用array_multisort()对三个数组排序 |
03 | array_multisort ( $sort1 , $sort2 , $sort3 ); |
04 | //把这个数组进行排序,并保持索引关系 |
05 | asort( $array ); |
06 | //把测试数组进行逆向排序,并保持索引关系 |
07 | arsort( $array ); |
08 | //使用ksort()对数组按键名排序 |
09 | ksort( $array ); |
10 | //使用krsort()函数按键名逆向排序 |
11 | krsort( $array ); |
12 | //使用sort()对测试数组进行排序[以键名排列] |
13 | sort( $array ); |
14 | //使用natsort()排序[自然排序,以数值排列]对单元数值大小写敏感 |
15 | natsort( $array ); |
16 | //使用natcasesort()函数排序[自然排序]但是忽略数值大小写 |
17 | natcasesort( $array ); |
18 | //使用array_reverse()函数排序,数组单元按相反排列 |
19 | $newArray = array_reverse ( $array ,TRUE); //TRUE设时保留原键名 |
交集、差集:
01 | //使用array_diff()计算三个数组的差集[对数组数值比较] |
02 | $result = array_diff ( $dog1 , $dog2 , $dog3 ); |
03 | //使用array_diff_assoc()计算三个数组的差集[对数值和键名比较] |
04 | $result = array_diff_assoc ( $dog1 , $dog2 , $dog3 ); |
05 | //使用array_diff_key()计算三个数组的差集[比较键名] |
06 | $result = array_diff_key ( $dog1 , $dog2 , $dog3 ); |
07 | //使用array_intersect()计算三个数组的交集[对数组数值比较] |
08 | $result = array_intersect ( $dog1 , $dog2 , $dog3 ); |
09 | //使用array_intersect_assoc()计算三个数组的交集[对数值和键名比较] |
10 | $result = array_intersect_assoc ( $dog1 , $dog2 , $dog3 ); |
11 | //使用array_intersect_key()计算三个数组的交集[比较键名] |
12 | $result = array_intersect_key ( $dog1 , $dog2 , $dog3 ); |
合并数组:
、 1 | //使用array_merge()函数合并数组 |
2 | $result = array_merge ( $array1 , $array2 , $array3 , $array4 , $array5 ); |
3 | array_rand ( $input ,10); //随机取出10个单元 |
4 | count ( $array ,COUNT_RECURSIVE); //显示数组单元数目,2参数只可为1或者COUNT_RECURSIVE,有时可遍历多维数组 |
出入栈:
1 | //数组出栈,后进先出,数组最后一个单元弹出 |
2 | array_pop ( $array ); |
3 | //数组入栈,将7,8两个数值添加到数组尾部 |
4 | array_push ( $array ,7,8); |
5 | //将数组开头单元移出数组 |
6 | array_shift ( $array ); |
7 | //将7,8添加入数组开头 |
8 | array_unshift ( $array ,7,8); |