博客
关于我
PHP之数组和函数的基本教程
阅读量:798 次
发布时间:2023-03-01

本文共 5770 字,大约阅读时间需要 19 分钟。

PHP数组详解

PHP数组是PHP编程中最强大的数据结构之一,能够灵活存储和操作数据。本文将从基础到高级功能,全面解析PHP数组的使用方法。

一、PHP数组的分类

PHP数组根据下标的不同分为两种类型:

  • 索引数组

    索引数组的下标是数字,依次从0开始增长。例如:

    $arr1 = [1, 2, 3, 4, 5, 6];

    索引数组的特点是键为整数,值与键值一一对应。

  • 关联数组

    关联数组的下标是字符串,每个键名与对应的值一一对应。例如:

    $arr2 = array(    "one" => 1,    "two" => 2,    "three" => 3);

    关联数组的键可以是数字字符串,例如 "10", "08" 等,仍然是关联数组而不是索引数组。

  • 二、数组的声明方式

    PHP支持三种方式声明数组:

  • 直接赋值
    使用数组语句直接赋值:
    $arr = array(    1 => "one",    2 => "two",    3 => "three");
  • 字面量
    PHP 5.4及以上版本支持使用字面量声明数组:
    $arr = [1, 2, 3, "one" => 4, 6];
  • Array()声明
    使用 Array() 函数声明数组:
    $arr = array(1, 2, 3, 4, 5);
  • 三、数组元素的读取

    PHP数组支持两种方式读取元素:

  • 索引方式
    使用数组索引直接访问:
    $arr = [1, 2, 3, "one" => 4];echo $arr[0]; // 输出1echo $arr["one"]; // 输出4
  • 关联方式
    使用字符串键访问关联数组:
    $arr = [1, 2, 3, "one" => 4];echo $arr{"one"}; // 输出4
  • 四、多维数组

    多维数组是指数组中的某个元素本身也是一个数组。多维数组通常用于存储嵌套数据结构。例如:

    $h51701 = array(    "gruop1" => array(        array("name" => "张三", "age" => 14, "sex" => "男"),        array("name" => "张三", "age" => 14, "sex" => "男"),        array("name" => "张三", "age" => 14, "sex" => "男")    ),    "gruop2" => array(        array("name" => "张三", "age" => 14, "sex" => "男"),        array("name" => "张三", "age" => 14, "sex" => "男"),        array("name" => "张三", "age" => 14, "sex" => "男")    ),    "gruop3" => array(        array("name" => "张三", "age" => 14, "sex" => "男"),        array("name" => "张三", "age" => 14, "sex" => "男"),        array("name" => "张三", "age" => 14, "sex" => "男")    ));

    多维数组的下标可以是数字或字符串,子数组可以是普通值或数组。

    五、遍历数组

    1. for循环

    for循环适用于纯索引数组:

    $arr = array(1, 2, 3, 5, 6, 7);$num = count($arr);for ($i = 0; $i < $num; $i++) {    echo "$i -> $arr[$i]\n";}

    2. foreach循环

    foreach循环适用于任何类型的数组:

    $arr = array(1, 2, 3, "one" => 4, 5, 6, 7);foreach ($arr as $item) {    echo "$item\n";}foreach ($arr as $key => $item) {    echo "$key -> $item\n";}

    3. list()、each()和while()

    list() 函数用于将数组值分配给变量:

    $arr = array(1, 2, 3);list($a, $b, $c) = $arr;

    each() 函数用于遍历数组并返回键值对:

    $arr = array(1, 2, 3);while (list($key, $value) = each($arr)) {    echo "$key -> $value\n";}

    while循环配合 each()list() 可实现自定义遍历方式。

    六、数组的高级操作

    1. 数组函数

    PHP 提供了丰富的数组函数,用于操作数组:

    • array_values():提取所有值,去除键名:

      $arr = array("a" => 1, "b" => 2);var_dump(array_values($arr)); // 输出: [1, 2]
    • array_keys():提取所有键名:

      var_dump(array_keys($arr)); // 输出: ["a", "b"]
    • in_array():检查数组中是否包含某个值:

      var_dump(in_array(8, $arr, true)); // true
    • array_flip():交换键和值:

      var_dump(array_flip($arr)); // 输出: [1 => "a", 2 => "b"]
    • array_reverse():反转数组:

      var_dump(array_reverse($arr, true)); // 输出: [2, 1]
    • array_count_values():统计值出现次数:

      $arr = array(1, 2, 3, 4, 5, 6, "a" => 7, "b" => 8, "c" => 9, 10);var_dump(array_count_values($arr)); // 输出: [1 => 1, 2 => 1, 3 => 1, 4 => 1, 5 => 1, 6 => 1, "a" => 1, "b" => 1, "c" => 1, 10 => 1]

    2. 数组排序

    PHP 提供多种排序函数:

    • sort()rsort():按升序或降序排序:

      $arr = array(3, 1, 2, 4);sort($arr); // 输出: [1, 2, 3, 4]rsort($arr); // 输出: [4, 3, 2, 1]
    • usort()uasort():使用自定义比较函数:

      $arr = array(3, 1, 2, 4);usort($arr, function($a, $b) {    return $a - $b;});

      或者:

      usort($arr, function($a, $b) {    return $b - $a; // 降序});
    • ksort()krsort():按键名排序:

      $arr = array("b" => 2, "a" => 1, "c" => 3);ksort($arr); // 输出: ["a" => 1, "b" => 2, "c" => 3]krsort($arr); // 输出: ["c" => 3, "b" => 2, "a" => 1]
    • **natsort() 和 **natcasesort()****:自然排序:

      $arr = array(3, "a", 2, "b");natsort($arr); // 输出: [2, 3, "a", "b"]

    3. 数组操作

    • array_slice():截取数组部分:

      $arr = array(1, 2, 3, 4, 5);$slice = array_slice($arr, 2, 5); // 输出: [3, 4, 5]
    • array_splice():删除或替换数组元素:

      $arr = array(1, 2, 3, 4, 5);$spliced = array_splice($arr, 4, 5, [0, 0, 0, 0]); // 输出: [0, 0, 0, 0]var_dump($arr); // 输出: [1, 2, 3, 4]
    • array_merge():合并数组:

      $arr1 = array(1, 2, "a" => 4, "10" => 5);$arr2 = array(6, 7, "a" => 9, "10" => 0);$merged = array_merge($arr1, $arr2);var_dump($merged); // 输出: [0 => 1, 1 => 2, "a" => 9, "10" => 0]
    • array_intersect()array_diff():求交集和差集:

      $arr1 = array(1, 2, 9, "a" => 4, 5);$arr2 = array(6, 7, 8, "a" => 9, "10" => 5);$intersect = array_intersect($arr1, $arr2); // 输出: [9, 5]$diff = array_diff($arr1, $arr2); // 输出: [1, 2, 4]

    七、数组的高级功能

    1. 数组指针

    PHP 提供 next()prev()end()reset() 等函数,用于数组的遍历和指针操作:

    $arr = array(1, 2, 3, 4, 5);$element = current($arr); // 输出: 1$element = next($arr); // 输出: 2

    2. 超全局数组

    PHP 提供了一组超全局数组,用于获取服务器信息和环境变量:

    • $_SERVER:服务器变量,包含浏览器信息、脚本路径等。
    • $_ENV:环境变量,需要在 php.ini 中调整。
    • $_GET$_POST:获取和提交的数据。
    • $_FILES:文件上传变量。
    • $_COOKIE:cookie 变量。
    • $_SESSION:会话变量。
    • $_GLOBALS:包含所有超全局数组。

    例如:

    var_dump($_SERVER); // 输出包含浏览器头信息的数组echo $_SERVER["HTTP_USER_AGENT"]; // 输出浏览器信息

    3. 数组函数的综合应用

    // 计算数组元素个数$num = count($arr);// 统计值出现次数$counts = array_count_values($arr);// 去重并保留第一个值$unique = array_unique($arr);// 过滤空值$filtered = array_filter($arr, function($num) {    return $num > 4;});

    4. 回调函数

    使用 array_walk()array_map()call_user_func() 等函数执行回调:

    $fruits = array("a" => "lemon", "b" => "orange", "c" => "apple");array_walk($fruits, function($item, $key) {    echo "$key -> $item\n";});

    八、函数与变量

    1. 函数的声明

    函数名需符合小驼峰法则,不能与系统函数名重复:

    function myFunction() {    // 函数体}

    2. 变量的作用域

    • 局部变量:声明在函数内。
    • 全局变量:声明在函数外。
    • 静态变量:使用 static 关键字,仅在函数内声明一次,保留到脚本终止。

    3. 参数传递

    • 常规参数
      function func($a) {    return $a + 10;}echo func(10); // 输出: 20
    • 引用参数
      function func(&$a) {    $a += 10;}$a = 10;func($a);echo $a; // 输出: 20
    • 默认参数
      function func($b = 10, $a = 5) {    return $a + $b;}func(30); // $a = 5, $b = 10

    4. 匿名函数

    匿名函数(closure)可直接使用:

    $func = function($param) {    echo "匿名函数处理了 $param\n";};$func(10);

    5. 递归函数

    递归函数可以调用自身:

    function factorial($num) {    static $result = 1;    if ($num > 0) {        $result *= $num;        factorial(--$num);    }    return $result;}echo factorial(10); // 输出: 3628800

    九、include与require

    // 导入外部文件require 'function.php';include 'function.php';

    十、闭包

    闭包可以引用父函数的变量,需使用 use 关键字:

    $closure = function($param) use ($var) {    echo "闭包访问 $param 和 $var\n";};$var = 10;$closure(5);

    十一、总结

    PHP 数组是灵活的数据结构,支持多种操作和高级功能,可满足复杂数据处理需求。通过合理使用数组函数和高级操作,可以显著提升代码的简洁性和效率。

    转载地址:http://edtfk.baihongyu.com/

    你可能感兴趣的文章
    php str_pad();
    查看>>
    PHP study 环境变量composer
    查看>>
    PHP trim() 函数
    查看>>
    php unicode编码转成unioce字符(中文)
    查看>>
    php url路径问题和php文件以绝对路径引入
    查看>>
    PHP WebSehll 后门脚本与检测工具
    查看>>
    ReentrantLock源码解析
    查看>>
    PHP XSS攻击防范--如何过滤用户输入
    查看>>
    php zookeeper实现分布式锁
    查看>>
    PHP 中 this,self,parent 的区别、用法
    查看>>
    PHP 中如何高效地处理大规模数据的排序?
    查看>>
    PHP 之ftp客户端类封装实现
    查看>>
    php 代码改进
    查看>>
    php 代码混淆
    查看>>
    PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址及其安全性问题
    查看>>
    Redis系列之如何避免缓存击穿
    查看>>
    php 内存分析
    查看>>
    PHP 函数名前面加&
    查看>>
    php 删除包含某一字符的数组元素
    查看>>
    Redis学习总结(19)——Redis 5种集群方式对比
    查看>>