(1)就像echo语句一样,array()实际上是一个语言结构,而不是一个函数。
(2)如果需要将升序排列的数字保存在一个数组中,可以使用rang()函数自动创建这个数组。
rang()函数还有一个可选的第三参数,这个参数允许设定值之间的步幅。例如,如需建立一个1~10之间的奇数数组:rang(1, 10 , 2)
rang()函数也可以对字符进行操作,如 rang( 'a' , 'z' )
(3)就像PHP的其他变量一样,数组不需要预先初始化或创建。在第一次使用它们的时候,它们会自动创建。所以,当要为数组添加新的元素,直接赋值给数组的最后一个元素。
(4)因为关联数组的索引不是数字,因此无法再for循环语句中使用一个简单的计数器对数组进行操作。但是可以使用foreach() 或 list() 和 each()结构。
假设数组为
$prices = array('Tires' => 100 , 'oil' => 10 , 'Spark Plugs' => 4);
foreach($prices as $key => $value){
echo $key . '-' . $value . "<br/>";
}
each()函数返回数组的当前元素,并将下一个元素作为当前元素。
while($element = each($prices)){
echo $element['key'];
echo '-' ;
echo $element['value'];
echo '<br/>';
}
当调用each()时,它将返回一个带有4个数值和4个指向数组位置的索引的数组。位置key和0包含了当前元素的关键字,而位置value和1包含了当前元素的值。
函数list() 可以用来将一个数组分解为一个系列的值。
while( list($product, $price) = each($prices) ){
echo "$product - $price<br/>";
}
使用list()将从each()返回的数组中所包含0、1两个元素变为两个名为$product和$price的新变量。
注意,当使用 each() 函数时,数组将记录当前元素。如果希望在相同的脚本中两次使用该数组,就必须使用函数 reset() 将当前元素重新设置到数组开始处。再次遍历数组,可以使用如下所示的代码:
reset($prices);
while(list($product, $price) = each($prices)){
echo $product . '-' . $price . '<br/>';
}
(5) 数组操作符
$a + $b 联合 数组$b将被附加到$a中,但是任何关键字冲突的元素将不会被添加,如果$b中的元素与$a中的一些元素具有相同索引,它们将不会被添加,即$a中的元素将不会被覆盖。
$a == $b 等价 如果$a 和 $b 包含相同的元素,返回true
$a === $b 恒等 如果$a 和 $b包含相同顺序和类型的元素,返回true。
(6)数组排序
使用 sort( ) 函数将数组按字母升序进行排序,还可以按数字顺序进行排序。sort()函数是区分大小写的。所有大写字母都在小写字母的前面。
该函数的第二个参数是可选的,这个可选参数可以传递SORT_REGULAR(默认值)、SORT_NUMERIC 或 SORT_STRING。 指定排序类型的功能是非常有用的,例如,当要比较可能包含有数字2和12的字符串时,从数字的角度看,2要小于12,但是作为字符串,‘12’却要小于‘2’。
使用asort( ) 函数和 ksort()函数对关联数组排序。
函数 asort() 根据数组的每个元素值进行排序。
函数 ksort() 根据数组关键字排序而不是按值排序。
反向排序函数与排序函数的用法相同。
函数 rsort() 将一个一维数字索引数组按降序排序。
函数 arsort() 将一个一维关联数组按每个元素值得降序排序。
函数 krsort() 根据数组元素的关键字将一维数组按照降序排序。
(7)多维数组的排序
假设多维数组如下:
$products = array (
array('TIR' , 'Tires' , 100),
array('OIL' , 'oil' , 10),
array('SPK' , 'Spark Plugs' , 4)
);
如果是按产品的说明按字母排序,或者对价格大小排序,需要用函数usort() 告诉PHP如何比较各个元素,要实现此功能,需要编写自己的比较函数。
如下所示的代码对订单数组中的第二列(说明),按字母进行排序:
function compare($x , $y){
if($x[1] == $y[1]){
return 0;
} else if($x[1] < $y[1]){
return -1;
} else {
return 1;
}
}
usort($products , 'compare');
在这个例子中,$x 和 $y 将是主数组中的两个子数组。
usort 中的“u”代表“user”,因为这个函数要求传入用户定义的比较函数。asort 和 ksort对应的版本 uasort() 和 uksort() 也要传入用户定义的比较函数。
用户定义的排序没有反向变体,但可以对一个多维数组进行反向排序。由于用户应该提供比较函数,因此可以编写一个能够返回相反值得比较函数。
function reverse_compare($x , $y){
if($x[2] == $y[2]){
return 0;
} else if($x[2] < $y[2]){
return 1;
}else{
return -1;
}
}
usort($products, 'reverse_compare');
( 8 ) 对数组进行重新排序
函数 shuffle() 将数组各元素进行随机排序。可以应用在电子商务随机显示商品的例子上。
函数 array_reverse() 给出一个原来数组的反向排序。该函数返回一个原始数组修改后的副本,并不会修改原来的数组。
创建一个从10 到 1 的数组有多种方法:
1、 range(10 , 1 , -1)
2、 $number = range(1,10);
$number = array_reverse( $number );
3、 $number = range(1 , 10);
rsort( $number );
4、 $number = array();
for( $i = 10; $i >0 : $i--){
array_push( $i );
}
(9) array_push() 函数将每个新元素添加到数组的末尾。
array_pop() 函数用力删除并返回数组末尾的一个元素。
(10)从文件载入数组
使用file() 函数将整个文件载入一个数组中,文件中的每一行则成为数组中的一个元素。
使用count() 函数来统计数组中的元素个数。
(11)explode(string separator, string string [, int limit])分割字符串。
这个函数的可选参数limit可以用来限制被返回的最大块数。
(12)执行其他数组操作
每个数组都有一个内部指针指向数组中的当前元素。当使用函数each()时,就间接使用了这个指针,但是也可以直接使用和操作这个指针。
如果创建一个新数组,那么当前指针就将被初始化,并指向数组的第一个元素。调用current( $array_name )将返回第一个元素。
调用next()和each()将使指针前移一个元素。调用each($array_name)会在指针前移一个位置之前返回当前元素。next()函数则有些不同——调用next($array_name)是将指针前移,然后再返回新的当前元素。
reset()函数将返回指向数组第一个元素的指针。类似的,调用end($array_name)可以将指针移到数组末尾。reset() 和 end()可以分别返回数组的第一个元素和最后一个元素。
要反向遍历一个数组,可以使用end()和prev()函数。prev()函数和next()函数相反。它是将当前指针往回移一个位置然后再返回新的当前元素。
(13)对数组的每一个元素应用任何函数:array_walk()
有时候我们可能希望以相同方式或者修改数组中的每一元素。array_walk()函数允许进行这样的操作。函数array_walk()的原型如下:
bool array_walk( array arr , string func , [mixed userdata] )第三个参数是可选的,如果使用它,它可以作为一个参数传递给我们自己的函数。
array_walk函数要求声明一个自己的函数。
对于数组中的每个元素,array_walk将以关键字和保存在数组中的值为参数,此外,还可以以任何数据作为该函数的userdata参数,可以按如下方式调用函数:
yourfunction(value , key , userdata)
在大多数情况下,函数只能处理数组中的值。但是在某些情况下,可能还需要使用userdata参数向函数传递一个参数。在少数情况下,可能还需要对数组关键字和值进行处理。例如:
function my_multiply(&$value, $key, $factor){
$value *= $factor;
}
array_walk(&$array,'my_multiply',3);
这个函数可以用来修改数组的值。请注意,虽然对关键字并不感兴趣,但为了接收第三个参数变量,还是必须接收它。
在my_multiply()函数定义中,变量前面的地址符&意味着$value是按引用方式传递的。按引用方式传递允许函数修改数组的内容。
(14)统计数组元素个数:count()、sizeof()和array_count_value()
如果调用array_count_values($array),这个函数将会统计每个特定的值在数组$array中出现过的次数(这就是数组的基数集)。这个函数将返回一个包含频率表的关联数组。这个数组包含数组$array中的所有值,并以这些值作为关联数组的关键字。每个关键字所对应的数值就死关键字在数组$array中出现的次数。
例如,如下代码
$array = array(4,5,1,2,3,1,2,1);
$ac = array_count_values($array);
将创建一个名为$ac的数组,该数组包括:
关键字 值
4 1
5 1
1 3
2 2
3 1
(15)将数组转换成标量变量:extract()
对于一个非数字索引数组,而该数组又有许多关键字-值对,可以使用函数extract()将它们转换成一系列的标量变量。extract()的函数原型如下所示:
extract(array var_array [, int extract_type] [, string prefix]);
extract()函数的作用是通过一个数组创建一系列的标量变量,这些变量的名称必须是数组中关键字的名称,而变量值则是数组中的值。