PHP基础回顾(三)——数组的使用

(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()函数的作用是通过一个数组创建一系列的标量变量,这些变量的名称必须是数组中关键字的名称,而变量值则是数组中的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值