PHP数组

原创 2016年09月01日 18:26:03

一、介绍

数组可以存多个值,这个值可以是数字,字符串,数组,对象等,数组里面存有数组叫多维数组。数组分为索引数组和关联数组。数组只能存标量和null,关于常量是不允许存的。

ps:数组能存的数量并没有限制,可以成千上万,跟内存有关,如果有大量数据,建议存数据库。

二、索引数组

索引数组也就是数字索引数组,数组中的值叫数组元素,每个元素都有一个相关的索引(也叫关键字),通常以数字0开始。例如:

$products = array( 'bus' , 213 , 'description');

echo $products[0];    //(string)bus
echo $products[1];    //(int)213
echo $products[2];    //(string)description

array和echo一样,都属于语言结构,而不是一个函数。创建数组也不一定要用array,例如下面的代码:

$products[0] = 'bus';
$products[1] = 213;
$products[2] = 'description';

这个数组是和上一个一模一样的。原理:$products[0]会新建一个数组,这个数组只有一个元素,就是bus。之后的$products[2]和$product[3]执行的是添加操作,向数组添加元素,只有第一个是创建。且这个数组的大小会根据添加元素的多少决定。

使用循环来遍历数组中的值:

for($i = 0; $i <= 3; $i++){
      echo $products[$i];
}
foreach($products  as  $current){
      echo $current;
}
遍历能访问数组中的所有元素,这是一个好的特性。第一种用的for循环,第二种用的foreach循环,as作用是将数组的值付给$current变量,而foreach循环是专为数组设计的。

三、关联数组

$products = array('name'=>'bus' , 'price'=>213 , 'desc'=>'description');

$products['name'];    //bus
$products['price'];    //213
$products['desc'];    //description

管理数组是不能用索引数组的访问方法的,如果使用$products[0]来获取元素时,并不会输出bus,而是报出一个错误。同样,不用array一样可以建关联数组,如下:

$products['name'] = 'bus';
$products['price'] = 213;
$products['desc'] = 'description';

老规矩,第一个是创建,后边都是添加。

使用循环遍历关联数组:关联数组不能简单的使用for的计数器进行遍历,可以使用foreach,list(),each()结构。下面依次介绍一下:

foreach($products  as  $key =>$value){
      echo $key ."---". $value ."<br/>";
}
这个foreach同之前不一样,foreach有多个结构,关联数组如果要打印出关联的名称,需加上key。

list的作用和array作用相反,array是将一系列数据整合成数组,而list是将一个数组中的数据拆出来。好理解的说就是将一个值赋给一个变量。

each传入一个数组,它会将数组元素的键和值返回回来。list和each的配合使遍历数组变得更简单。

while(list($key , $value) = each($products)){
      echo $key ."---". $value ."<br/>";
}
这里提一个注意点:each遍历数组时,返回第一个元素后,就会将指针移到下一个元素,直到数组最后。如果一个脚本中要遍历多次这个数组时,可能第二遍指针并不在开始处。解决办法如下:

reset($products);
while(list($key , $value) = each($products)){
      echo $key ."---". $value ."<br/>";
}
在遍历前加上reset即可。reset会将数组内部的指针移到第一位。

四、数组操作符

具体代码可以在网上搜索下,因为篇幅,这里不加了。

五、多维数组

首先介绍下索引多维数组,代码如下:

$products = array(array('bus', 213 , 'busdesc'),
                  array('bicycle' , 85 , 'bicycledesc'),
                  array('plane' , 546 , 'planedesc'));

$products[0][0];    //bus
索引多维数组取值时先取子数组,再取子数组中的元素,例如$products[0][0],则取第一个数组中的第一个元素。

老顺序,下面介绍for循环索引多维数组:如下代码:

for($row = 0; $row < 3; $row++){
      for($column = 0; $column < 3; $column++){
            echo $products[$row][$column];
      }

      echo "<br/>";
}
下面介绍下关联多维数组:先看代码:

$products = array(array(
                       'name' => 'bus',
                       'price' => 213,
                       'desc' => 'busdesc'
                   ),
                   array(
                       'name' => 'bicycle',
                       'price' => 85,
                       'desc' => 'bicycledesc'
                   ),
                   array(
                       'name' => 'plane',
                       'price' => 546,
                       'desc' => 'planedesc'
                   )
            );
如果要检索单个值,关联数组特别容易,不需要记住存放位置[x][y],使用有意义的行和列的名称作为索引就可以。

使用for循环关联多维数组代码如下:

for($row = 0; $row < 3; $row++){
    echo $products['$row']['name'];
}

以上代码会取出关联多维数组中所有键为name的元素。

可以在while循环中使用each()和list()函数遍历整个内部数组,具体代码如下:

for($row = 0; $row < 3; $row++){
    while(list( $key , $value) = each($products[$row])){
        echo $value;
    }
    echo "<br/>";
}
数组并没有设置维数,也有三维数组,四维数组,不过一般逻辑三维就够了,维数太多并不好维护。

在这里,简单插入一个点,range创建数组,可传入三个参数,第一个是数组元素的起始位置,第二个是数组元素的结束位置,第三个是步长值,贴下代码介绍下:

$testarr = range(1,10,2);
var_dump($testarr);       //array(1,3,5,7,9);
从1开始到10为止,第三个参数可选,步长为2时,得到的是一到十的奇数。range容易和rand搞混,rand是产生随机数用的,常用于手机验证码。

六、数组排序

顾名思义,就是将数组中元素进行排序,不废话,先贴个小demo看下:

$res = array('a' , 'c' , 'b');
sort($res);     //a b c
sort是将数组中的元素进行升序排序,这里举例的是字母,数字也一样。sort函数是区分字母大小写的,所有大写字母都在小写字母的前面。所以A小于Z,而Z小于a。

sort函数的第二个参数是可选的,这个参数可以传递SORT_REGULAR(默认值)、SORT_NUMERIC或SORT_STRING,指定排序类型的功能很重要。例如:

当要比较可能包含数字2和12的字符串时,从数字角度看,2要小于12,但作为字符串,12要小于2.

这里说的是索引数组的升序,下面看下关联数组的升序:

$res = array('a'=>3, 'b'=>1, 'c'=>2);
asort($res);    //根据元素的值升序,array(1,2,3)
ksort($res);    //根据元素的键升序, array(3,1,2)

整理一下思路:sort是索引数组升序,asort是关联数组按值升序,ksort是关联数组按键升序,降序同理,下面列一下:

反向排序分别对应:rsort是索引数组降序,arsort是关联数组按值降序,krsort是关联数组按键降序,比对一下,降序比升序函数多了一个r字母。

下面介绍一下数组的重新排序,:

函数shuffle()将数组各元素进行随机排序。

函数array_reverse()将原数组进行反向排序。

举个小例子,创建一个逆顺序10到1的数组,两种方法:

//第一种
$numbers = array();
for($i=0; $i>0; $i--){
    array_push($numbers, $i);
}

//第二种
$numbers = range(1, 10);
$numbers = array_reverse($numbers);
array_push是向数组中添加元素,相反的是array_pop()函数,删除并返回数组末尾的一个元素。

第二种array_reverse()返回的是原数组的副本,可以替换原数组。

七、数组的其他操作

每个数组都有一个内部指针指向数组中的当前元素,当使用each()的时候就间接的使用了这个指针,也可以直接操作这个指针。

创建一个数组,指针就会被初始化,调用current()函数,将会返回第一个元素,传入数组名即可。pos()函数是current()的别名,返回数组当前指针所在的元素。

调用next()或each()会将指针前移一个元素。调用each()会在指针前移一个位置之前返回当前元素。next()有些不同,调用next()是将指针前移,然后再返回当前元素。

和next()相反的有一个prev()函数,它会将当前指针往回移一个位置,然后返回新的当前元素。

已经了解到reset()函数将返回指向数组第一个元素的指针,类似,调用end()可以将指针移到末尾。

紧缩上面这段话,再来看:

next和each都是前移一个位置返回当前元素。current和pos都是返回当前元素。next有个相反函数叫prev,指针回移并返回元素。reset和end分别将指针移到第一位和最后一位。

利用这些可以写以任何顺序浏览数组的代码。

下面看一下对数组每一个元素应用指定操作:看代码:

function myfunction($value, $key){
    echo "$value is value, $key is key<br>";
}

$a=array('a'=>11, 'b'=>22, "c"=>33);
array_walk($a , "myfunction");

//输出
11 is value, a is key
22 is value, b is key
33 is value, c is key
array_walk()函数第一个参数传入数组名称,第二个传入要执行操作的函数,这样每个元素都会放到函数中执行一遍。

下面看下如何计算数组的个数:

获取数组中的元素个数,最常用的就是count(),sizeof()两个函数了,他们功能一样,都是获取数组元素个数的。

重点看下array_count_values($array);函数,他会统计特定的值在数组$array中出现过的次数。这个叫数组基数集。看下代码:

$array = array(5, 3, 2, 1, 3, 5);
$ac = array_count_values($array);

//$ac输出如下
5   2
3   2
2   1
1   1
输出结果代表,5出现了两次,3出现了两次,2出现了一次,1出现了一次。

下面介绍最后一个点:将数组转换成一系列的标量和变量,此处用的函数是extract(),看下代码:

$arr = array('key1'=>val1, 'key2'=>val2, 'key3'=>val3);
extract($arr);
echo $key1,$key2,$key3;

//结果输出:val1,val2,val3    
变量名也就是键名,变量值就是数组的值。extract是从数组中提取键为变量名的,所以键应该遵循命名规则,如果包含空格之类的,都不会被提取。

extract提供第三个参数,主要是,当遇到相同变量时怎么办,覆盖还是省去,等等,具体参数值可以网上找一下或看下帮助文档,项目需求用到时,查一下就好,没有必要一一记住。


版权声明:本文为博主原创文章,未经博主允许不得转载。

PHP教程ppt数组

  • 2015年07月05日 21:07
  • 99KB
  • 下载

php_array数组1

  • 2014年05月06日 17:20
  • 37KB
  • 下载

PHP中对数组进行操作的常用函数总结

在PHP中,对数组的操作是非常常见的,所以,掌握一些常用且重要的数组操作函数尤其重要。现将一些本人认为较为重要的函数总结如下: 1.创建数组使用的是array(),如: $a = array("a"...

PHP数组基础知识

  • 2014年01月28日 01:45
  • 6KB
  • 下载

php判断是几维数组

  • 2015年06月27日 15:07
  • 436B
  • 下载

PHP数组函数的分组归纳

统计: array_count_values     统计数组中所有的值出现的次数 array_product         计算数组中所有值的乘积 array_sum         计算数...
  • jjmaiz
  • jjmaiz
  • 2012年11月22日 16:05
  • 8054

php随机生成一个多维数组

  • 2013年11月20日 22:36
  • 1KB
  • 下载

php 数组 添加元素、删除元素

原文地址:http://blog.163.com/lishilin_468@126/blog/static/16290113820124411231846/ 拆分数组 PHP数组添加一个元素的...
  • th362cn
  • th362cn
  • 2013年02月07日 11:08
  • 153728
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP数组
举报原因:
原因补充:

(最多只允许输入30个字)