php学习笔记之--数组的应用与处理函数

数组的应用与处理函数

数组的简介

  一、数组的概述

    1. 数组的本质:管理和操作一组变量,成批处理
    2. 数组是复合类型
    3. 数组中可以存储任意长度的数据,也可以存储任意类型的数据
    4. 数组就可以完成其它语言数据结构的功能(链表, 队列, 栈, 集合类)

  二、数组的分类

    1.数组中存有多个单元,(单元称为元素)
    2.每个元素(下标[键]和值)
    3.单访问元素时候,都是通过下标(键)来访问元素
    4. 一维数组, 二维数组, 三维数组 。。。 多维数组
    (数组的数组, 就是在数组中存有其它的数组)
    5. PHP中有两种数组
    索引数组:就是下标是顺序整数作为索引
    关联数组:就是下标是字符串作为索引
    下标(整数, 字符串)只有这两种

  三、数组多种声明方式

    1.直接为数组元素赋值
       a.如果索引下标不给出,就会从0开始顺序索引
       b.如果给出索引下标,下一个就会是从最大的开始增1
       c.如果后面出现前面的下标,如果是赋值就是为前面的元素重新赋值
       d. 混合声明时,索引和关联不互相影响(不影响索引下标的声明)
    2.使用array()函数
       a. 默认是索引数组
       b.如果为关联数组和索引数组指定下标,使用 键=>值
       c.多个成员之前使用“,”分割
    3.使用其它的函数声明 file();

数组的遍历

     1.使用for语句循环遍历数组

        a. 其它语言(只有这一种方式)
      b. PHP中这种方式不是我们首选方式
       c. 数组必须是索引数组,而且下标还必须是连续的
        (索引数组下标还可以不连序,数组还有关联数组)

    2. foreach

这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。
foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key

注: foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()
注: 除非数组是被引用foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。因此数组指针不会被 each() 结构改变,对返回的数组单元的修改也不会影响原数组。
在处理数组的过程中向前移动了。假定 foreach 循环运行到结束,原数组的内部指针将指向数组的结尾。

不过原数组的内部指针的确自 PHP 5 起,可以很容易地通过在 $value 之前加上 & 来修改数组的单元。此方法将以引用赋值而不是拷贝一个值。  

<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)

?>  

 此方法仅在被遍历的数组可以被引用时才可用(例如是个变量)。

<?php
foreach (array(1, 2, 3, 4) as &$value) {
    $value = $value * 2;
}

?>

上面这种就会输出一句警告

Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset().
 

注: foreach 不支持用“@”来抑制错误信息的能力。 

   3. while() list() each() 组合循环遍历数组

         each()函数,
            a. 需要一个数组作为参数
            b. 返回来的也是一个数组
            c. 返回来的数组是0, 1, key, value四个下标(固定的)
                  0key下标是当前参数数组元素的鍵
                  1value下标是当前对数数组元素的值

            d. 默认认当前元素就是第一个元素
            e. 每执行一次后就会将当前元素向后移动
            f. 如果到最后的元素再执行这个函数,则返回false
        //Array ( [1] => 1 [value] => 1 [0] => id [key] => id ) 

        list()函数
            a. list()=array(); 需要将一个数组赋值给这个函数
            b. 数组中的元素个数,要和list()函数中的参数个数相同
            c. 数组中的每个元素值会赋值list()函数中的每个参数,list()将每个参数转为变量
            d. list()只能接收索引数组
            e. 按索引的下标的顺序
list不使用新变量直接交换现有两个变量的值
<?
//如何不用新变量直接交换现有两个变理的值?
$a = 1; $b = 2;
list($a, $b) = array($b, $a);
echo $a."-------".$b;
?>

 

预定义数组:

    自动全局变量---超全局数组

    1. 包含了来自WEB服务器,客户端,运行环境和用户输入的数据
    2. 全局范围内自动生效,都可以直接使用这些数组
    3. 用户不能自定义这些数组, 但这些数据操作方式又和我们自定义的数组操作方式一样
    4. 在函数中直接可以使用这些数组

    $_GET       //经由URL请求提交至脚本的变量 
    $_POST      //经由HTTP POST 方法提交到脚本的变量
    $_REQUEST   //经由GET, POSTCOOKIE机制提交 到脚本的变量,因此该数组并不值得信任,不去使用(尽量)
    $_FILES     //经由HTTP POST  文件上传而提交至脚本, 文件处理一章,文件上传
    $_COOKIE    //
    $_SESSION   //
    $_ENV       //执行环境提交至脚本的变量
    $_SERVER    //变量由WEB服务器设定的,或 直接和当前脚本的执行环境相关联
    $GLOBALS    //只要是当前脚本有效的变量都在这里,数组键名为全局变量的名称。注:主程序中的全局变量,函数内部不能直接使用,
                  可通过GLOBALS[]访问。函数内定义的全局变量主程序和函数内都可以使用。

数组 函数

Table of Contents

  • array_change_key_case — 返回字符串键名全为小写或大写的数组
  • array_chunk — 将一个数组分割成多个
  • array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
  • array_count_values — 统计数组中所有的值出现的次数
  • array_diff_assoc — 带索引检查计算数组的差集
  • array_diff_key — 使用键名比较计算数组的差集
  • array_diff_uassoc — 用用户提供的回调函数做索引检查来计算数组的差集
  • array_diff_ukey — 用回调函数对键名比较计算数组的差集
  • array_diff — 计算数组的差集
  • array_fill_keys — 使用指定的键和值填充数组
  • array_fill — 用给定的值填充数组
  • array_filter — 用回调函数过滤数组中的单元
  • array_flip — 交换数组中的键和值
  • array_intersect_assoc — 带索引检查计算数组的交集
  • array_intersect_key — 使用键名比较计算数组的交集
  • array_intersect_uassoc — 带索引检查计算数组的交集,用回调函数比较索引
  • array_intersect_ukey — 用回调函数比较键名来计算数组的交集
  • array_intersect — 计算数组的交集
  • array_key_exists — 检查给定的键名或索引是否存在于数组中
  • array_keys — 返回数组中所有的键名
  • array_map — 将回调函数作用到给定数组的单元上
  • array_merge_recursive — 递归地合并一个或多个数组
  • array_merge — 合并一个或多个数组
  • array_multisort — 对多个数组或多维数组进行排序
  • array_pad — 用值将数组填补到指定长度
  • array_pop — 将数组最后一个单元弹出(出栈)
  • array_product — 计算数组中所有值的乘积
  • array_push — 将一个或多个单元压入数组的末尾(入栈)
  • array_rand — 从数组中随机取出一个或多个单元
  • array_reduce — 用回调函数迭代地将数组简化为单一的值
  • array_replace_recursive — 使用传递的数组递归替换第一个数组的元素
  • array_replace — 使用传递的数组替换第一个数组的元素
  • array_reverse — 返回一个单元顺序相反的数组
  • array_search — 在数组中搜索给定的值,如果成功则返回相应的键名
  • array_shift — 将数组开头的单元移出数组
  • array_slice — 从数组中取出一段
  • array_splice — 把数组中的一部分去掉并用其它值取代
  • array_sum — 计算数组中所有值的和
  • array_udiff_assoc — 带索引检查计算数组的差集,用回调函数比较数据
  • array_udiff_uassoc — 带索引检查计算数组的差集,用回调函数比较数据和索引
  • array_udiff — 用回调函数比较数据来计算数组的差集
  • array_uintersect_assoc — 带索引检查计算数组的交集,用回调函数比较数据
  • array_uintersect_uassoc — 带索引检查计算数组的交集,用回调函数比较数据和索引
  • array_uintersect — 计算数组的交集,用回调函数比较数据
  • array_unique — 移除数组中重复的值
  • array_unshift — 在数组开头插入一个或多个单元
  • array_values — 返回数组中所有的值
  • array_walk_recursive — 对数组中的每个成员递归地应用用户函数
  • array_walk — 对数组中的每个成员应用用户函数
  • array — 新建一个数组
  • arsort — 对数组进行逆向排序并保持索引关系
  • asort — 对数组进行排序并保持索引关系
  • compact — 建立一个数组,包括变量名和它们的值
  • count — 计算数组中的单元数目或对象中的属性个数
  • current — 返回数组中的当前单元
  • each — 返回数组中当前的键/值对并将数组指针向前移动一步
  • end — 将数组的内部指针指向最后一个单元
  • extract — 从数组中将变量导入到当前的符号表
  • in_array — 检查数组中是否存在某个值
  • key — 从关联数组中取得键名
  • krsort — 对数组按照键名逆向排序
  • ksort — 对数组按照键名排序
  • list — 把数组中的值赋给一些变量
  • natcasesort — 用“自然排序”算法对数组进行不区分大小写字母的排序
  • natsort — 用“自然排序”算法对数组排序
  • next — 将数组中的内部指针向前移动一位
  • pos — current 的别名
  • prev — 将数组的内部指针倒回一位
  • range — 建立一个包含指定范围单元的数组
  • reset — 将数组的内部指针指向第一个单元
  • rsort — 对数组逆向排序
  • shuffle — 将数组打乱
  • sizeof — count 的别名
  • sort — 对数组排序
  • uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
  • uksort — 使用用户自定义的比较函数对数组中的键名进行排序
  • usort — 使用用户自定义的比较函数对数组中的值进行排序

posted @ 2011-10-09 21:31  漠北风  阅读(586)  评论(0编辑  收藏  举报