牛骨文教育服务平台(让学习变的简单)
博文笔记

[总结]PHP数组

创建时间:2016-01-25 投稿人: 浏览次数:236

一、数组的分类

分为关联数组和索引数组两类。
   关联数组即是以字符串为下标的数组;
   索引数组即是以数字为下标的数组。

二、数组的声明

声明数组有两种方式
  1、直接声明使用
  2、使用array语言结构声明(注意,array是语言结构)。

三、数组的遍历

 1、使用for循环遍历数组,但是这种遍历只能遍历索引数组,并且效率不如foreach效率高,使用较少。
 2、使用foreach遍历数组。这是PHP专门为遍历数组设计的语言结构,效率很高,可以遍历索引数组和关联数组。
 3、使用list(),each(),while进行遍历
     list()是一个语言结构,会将索引数组中的值按照从下标0开始存起来。如:
$arr=array(0=>"ID",1="1");
list($key,$value)=$arr;
echo $key;//ID
echo $value;//1

each()就会将一个数组打造成上面$arr=array(0=>”ID”,1=>”1”)的形式。

结合起来使用,如下:

<?php
    $arr=array(
            array("ID"=>1,"name"=>"eric","number"=>"15764244227"),
            array("ID"=>2,"name"=>"david","number"=>"15764244249"),
        );
    while(list($key,$value)=each($arr))
    {
        echo $value["ID"]." ".$value["name"]." ".$value["number"]."<br/>";
    }

四、预定义数组

1、$_SERVER包含了服务器额信息
2、$_GET、$_POST、$_REQUEST
$_REQUEST包含了$_COOKIE中的内容,不安全,并且速度慢,非必要条件时,不建议使用。
3、$_COOKIE和$_SESSION
4、$GLOBALS包含了以上所有的超全局数组。

五、数组操作函数

1、键值对的操作

 array_keys()返回数组中所有的健
 array_values()返回数组中所有的值组成一个新数组,新数组是索引数组,下标从0开始。适用于下标混乱,或将关联数组转为索引数组的数组。
 array_flip()键值对互换(即健换位值,值换为健)
 array_reverse()将元素顺序翻转,即将第1个元素放到最后一个,依次换。
 in_array(元素,数组)判断元素是否在数组里。

2、统计数组元素的个数和唯一性
count()统计元素个数
array_count_values()统计元素出现的次数
array_unique()将数组中重复的值删除,返回无重复元素的数组

3、使用回调函数处理数组

array_filter(array(),”func”) 使用回调函数进行过滤
调用func函数过滤array()中的元素,将array()中的元素依次传入func()中,如果func()返回true,则保留这个元素,否则删除这个元素。
如下:

<?php
function myFun($value)
{
    if($value%2==0)
    {
        return true;
    }
}
$arr=array(1,2,3,4,5);
$res= array_filter($arr,"myFun");
print_r($res);//Array ( [1] => 2 [3] => 4 )

array_map(func,array,[array]…)按照func的规则,作用于数组上,返回新数组。

<?php
function myFun($value)
{
    if($value=="mysql")
        return "oracle";
    else
        return $value;
}

$arr=array("linux","apache","mysql","php");
print_r(array_map("myFun",$arr));//Array ( [0] => linux [1] => apache [2] => oracle [3] => php )
最值得一提的是,array_map()还能处理多个数组。
如下代码:
<?php
function myFun($v1,$v2)
{
    if($v1==$v2)
        return "same";
    else
        return "different";
}
$arr1=array("linux","mysql","php");
$arr2=array("windows","oracle","php");
print_r(array_map("myFun",$arr1,$arr2));//Array ( [0] => different [1] => different [2] => same )

4、排序

对值进行排序:
    sort()对元素值进行升序排列(asort()和sort()一样,不过asort()保留键名)
    rsort()对元素值进行降序排列

对健进行排序:
    ksort()对健进行升序排列
    krsort()对健进行降序排列
使用回调函数进行排序。usort()、uksort()、uasort()
下面仅介绍usort(),其他使用方法一样。

如果按照升序排列,当$v1大于$v2时,返回1。
如果按照降序排列,当$v1大于$v2时,返回-1。

这里写图片描述

返回值为:Array ( [0] => php [1] => mysql [2] => Linux [3] => apache )

对多维数组的排序:array_multisort()(有点像group by)

<?php
$data=array(
        array("id"=>1,"soft"=>"Linux","rating"=>3),
        array("id"=>2,"soft"=>"Apache","rating"=>1),
        array("id"=>3,"soft"=>"Mysql","rating"=>4),
        array("id"=>4,"soft"=>"PHP","rating"=>2)
    );
foreach($data as $k=>$v)
{
    $soft[$k]=$v["soft"];
    $rating[$k]=$v["rating"];
}
array_multisort($rating,$soft,$data);
print_r($data);

先按照$rating排序,当$rating相同时,再按照$soft排序。

5、拆分、合并
拆分:array_slice()
如下:1表示从下标1开始拆分,2表示拆分2个元素
这里写图片描述

合并:array_combine、array_merge

array_combine()将两个数组合并为一个,一个用作键名,一个用作键值。
这里写图片描述
输出为:Array ( [OS] => Linux [Server] => Apache [Database] => Mysql [Language] => php )

array_merge()将两个数组合并为一个数组:
这里写图片描述

输出为:
Array ( [0] => OS [1] => Server [2] => Database [3] => Language [4] => Linux [5] => Apache [6] => Mysql [7] => php )

6、求交集与差集
求交集:两个数组中共有的部分:
这里写图片描述
输出为:Array ( [2] => Mysql [3] => php )

求差集:两个$arr1含有,但$arr2没有的:

这里写图片描述
输出:Array ( [0] => Windows [1] => Tomcat )

六、使用数组建立栈和队列

栈的建立:
array_push()压栈
array_pop()出栈

栈:后进先出,故array_pop()弹出最后一个进入栈的元素
这里写图片描述

队列的建立:
array_push()入队
array_shift()出队

队列:先进先出,故array_shift()队首出队。
这里写图片描述

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。