数组简单的说就是一种存储数据的方式。这种方式特别重要,在以后会经常用到。废话不多说,我简单的总结了PHP数组。
1、数组的命名
数组的命名规则同变量的命名规则一样,首先是$符号开头,名称第一个字符是英文字母或者下划线,不能使用数字或者特殊符号开头。数组名对大小写是敏感的。
2、数组的声明
数组的声明是依靠声明函数来定义的。最常见的是array();但是手册上对它有这样的一句解释:array() 是一个语言结构,用于字面上表示数组,不是常规的函数。
php数组其实是键值对($key=>$value)的组合,在php里面,有两种类型的数组,一种是索引数组,一种是关联数组。索引数组就是$key是数字,一个索引。关联数组就是$key是字符串,一个词对应一个值。那么
使用array()是这样做的:
$arr= array(这里面是对arr数组赋值,可以为空);
这里对括号里面的参数说明几点:
①首先参数可以为空,代表我只是声明了这个数组,但是没有给数组赋值。那么我使用它的时候可以给它赋一维数组,也可以二维数组甚至更高维的数组。
②参数可以只写数组中存入的值$value,比如:$arr =array(“value1”,”value2”,”value3”);这样做默认就是索引数组,那么访问它或者说是使用里面的值的时候就应该是这么使用:$arr[0]……。
③可以显示的声明成索引数组,比如:$arr = array(1=>“value1”,2=>”value2”,3=>”value3”);访问里面的值的时候同上。
④可以声明成关联数组,比如:$arr =array(“key1”=>“value1”, “key2”=>”value2”, “key3”=>”value3”);那么访问的时候就应该是这样的:$arr[‘key1’]……
对于一个数组,可以使用这个php语句来看他的详细结构:echoprint_r($arr);或者var_dump($arr);
这里我在说明一下:php在显示声明索引数组时索引是可以不用挨着的,也就是不一定12345……这样,可以是12579。
参数之间用逗号隔开,最后一个参数后面可以加逗号,也可以不加。一般不加。加上也不算错。
另外我今天写这篇之前,看了一下书,发现书上还有几种声明数组的函数,然后我就看了一下他们的用法,这里跟大家分享。
(1)array array_combine ( array $keys , array$values )
这个函数也是返回一个数组,不过他的参数却是两个数组类型的参数。这个函数是这个意思,我举一个例子:
<?php
$a = array( 'green' , 'red' , 'yellow' );
$b =array( 'avocado' , 'apple' , 'banana' );
$c = array_combine ( $a , $b );
print_r ( $c );
?>
那么这个会输出:
Array
(
[green] => avocado
[red] => apple
[yellow] => banana
)
也就是说第一个函数里面的值作为了返回数组的键$key,第二个函数的值作为了返回数组的值$value。那么访问返回数组的时候就应该是$array[‘key’]……
(2)array array_fill ( int $start_index , int$num , mixed $value )
这个函数名里面带了一个fill,也就是填充的意思,那么也就好理解了。里面三个参数,第一个参数是返回数组的键,Int型说明这是一个索引数组,start说明开始的数字,如果是正数就递增+1,如果是负数那么第一索引是指定的负数,之后是从0开始。第二个参数是要填充值的数量,最后一个就是要填充的值了。那么会发现,其实整个数组里面的值是相同的,但是索引不同。比如:
<?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
)
(3)arrayarray_pad ( array $input , int $pad_size , mixed $pad_value )
这个又是一个用数组做参数的,好烦。这个的意思就是用pad_value的值去填充input,不过这个input里面可能有值,那么这个函数是不会清空他的,如果pad_size大于input的长度,那么就会在它后面填充,返回数组的长度为pad_size。如果小于input的长度,就不会填充。如果是pad_size是负数,那么就要看他的绝对值。如果绝对值大于input的长度,就会往左添加。小于则不做修改。比如:
<?php
$input = array( 12 , 10 , 9 );
$result = array_pad ( $input , 5 , 0);
// result is array(12, 10, 9, 0, 0)
$result = array_pad ( $input , - 7 , - 1);
// result is array(-1, -1, -1, -1, 12, 10, 9)
$result = array_pad ( $input , 2 , "noop" );
// not padded
?>
(4)arraycompact ( mixed $varname [, mixed $... ] )
这个其实有点难理解,我直接举例子吧:
<?php
$city = "San Francisco" ;
$state = "CA" ;
$event = "SIGGRAPH" ;
$location_vars = array( "city" , "state" );
$result = compact ( "event" , "nothing_here" , $location_vars );
print_r ($result );
?>
以上例程会输出:
Array
(
[event] => SIGGRAPH
[city] => San Francisco
[state] => CA
)
我解释一下是怎么来的,首先我声明了三个变量,$city = "San Francisco" ;$state = "CA" ;$event = "SIGGRAPH" ;还有一个数组$location_vars = array( "city" , "state" );其实现在变量名就是调用这个函数返回数组的键了,而变量的值就是数组的值。而这个数组里面的值就也是相当于返回数组的键。所以当我们$result = compact ( "event" , "nothing_here" , $location_vars );使用这句话去返回一个数组的时候,他就会去查找是不是有变量叫event,他找到了,那么他就有对应的值SIGGRAPH,他又去找nothing_here发现没有定义这个变量,那么数组中也不会存储他。之后他把数组传进去,那么他就会挨着找数组的值是不是有变量名与他对应,如果有对应,那么他就会存储,否则就略过。所以看到了这个结果。
但是这四种我都没用过,第一种array()是一定要会的。
除了用数组声明函数来声明函数之外,PHP还有一种声明方式就是$arr[]=某值。比如
$arr[0]=’value1’;
$arr[1]=’value2’;
……
这样也可以声明一个数组。
3、遍历数组
遍历数组使用循环语句。可以看一下循环语句是怎么回事。
最常见的有foreach($arras $key=>$value)、for($i = 0;$i<count($arr);$i++)、while($arr[$i++])等。遍历可以有遍历一维数组或者多维数组。我这里举例:
首先我有这么一个数组:
$array= array(“西游记”=>”吴承恩”,”红楼梦”=>”曹雪芹”,”水浒传”=>”施耐庵”,”三国演义”=>”罗贯中”);
我可以这么遍历:
foreach($arrayas $key=>$val){
echo $key.”=>”.$val;//这里你可以只打印$val,我这里是把结构打印出来了。
}
$array = array(“西游记”,”红楼梦”,”水浒传”,”三国演义”);
for($i=0;$i<count($array);$i++){
echo $array($i);
}
$i=0;
while($array[$i++]){
echo $array[$i];
}
三种遍历方法,看情况使用。如果是关联数组,一般用foreach()来遍历。
4、常用的数组函数
函数 | 作用 |
array explode ( string $delimiter, string $string [, int $limit] ) | 此函数返回由字符串组成的数组,每个元素都是 string 的一个子串,它们被字符串 delimiter 作为边界点分割出来。 |
string implode ( string $glue , array $pieces ) string implode ( array $pieces) | 用 glue 将一维数组的值连接为一个字符串。 |
bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) | 本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。 |
bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR] ) | 本函数对数组进行逆向排序(最高到最低)。 |
bool in_array ( mixed $needle , array $haystack [, bool $strict= FALSE] ) | 在 haystack 中搜索 needle,如果没有设置 strict 则使用宽松的比较。如果找到 needle 则返回 TRUE ,否则返回 FALSE 。 |
int array_push( array &$array , mixed $var [, mixed $...] ) | array_push() 将 array 当成一个栈,并将传入的变量压入 array 的末尾。array 的长度将根据入栈变量的数目增加。和如下效果相同: <?php $array [] = $var ;?> 并对每个 var 重复以上动作。 |
这些函数的具体用法参考手册。
5、数组的赋值
数组的赋值与变量差不多,只是是对每一个元素进行赋值,特别说明的一点就是:
可以这么通过循环语句赋值:
while(你的条件){
$arr[]= 某个值;
}
这样他会从$arr[0]开始依次赋值,生成一个索引数组。
数组大概我能总结的就这么多了。这几天我自己也在学习新的知识,常常忘了一些事,所以就更新的比较懒。
下一篇开始看php是如何面向对象的。