1. 数组介绍

数组是一组数据的集合,这组数据按照一定的规则组织起来,形成一个可操作的整体。

PHP 中的 array 实际上是一个有序映射。

映射是一种把 values 关联到 keys 的类型。

此类型针对多种不同用途进行了优化; 它可以被视为数组、列表(向量)、哈希表hash table(映射的实现)、字典、集合、堆栈、队列等等。

由于 array 的值可以是其它 array 所以树形结构和多维 array 也是允许的。

2. PHP数组分类

根据数组下标不同,PHP中的数组可以分为两类

  • 索引数组
  • 关联数组

索引数组就是传统的数组定义方式 . 通过下标的方式保存和操作数组中的元素.

关联数组更像是其它语言中的字典,或对象, 使用键值对的方式保存和操作数组中的元素.

以下笔记 中,都按对比的方式 , 讲解两种数组的操作.

3. 数组的定义

  • 定义空数组
    在定义空数组时,不会区分数组是索引数组还是关联数据,完全看后期的使用方式

    1. <?php
    2. header("content-type:text/html;charset=utf-8");
    3. // 定义空数组
    4. $arr1 = array();
    5. echo gettype($arr1);
    6. echo "<br>";
    7. $arr2 = [];
    8. echo gettype($arr2);
    9. echo "<br>";
    10. ?>
  • 定义带元素的数组

    • 索引数组
      ```php <?php // 定义带元素的数组 $arr3 = array(1,2,3,4); var_dump($arr3); echo “
      “;

    // 由于PHP是弱类型语言,数组中的元素可以是任意类型 $arr4 = [“cat”, “dog”,”pig”]; var_dump($arr4); echo “
    “;

?>

  1. - 关联数组<br />key 可以是 integer 或者 stringvalue 可以是任意类型。
  2. ```php
  3. <?php
  4. header("content-type:text/html;charset=utf-8");
  5. //
  6. // 定义带元素的数组
  7. $arr1 = array( "Monday"=>"星期一",
  8. "Tuesday"=>"星期二",
  9. "Wednesday"=>"星期三",
  10. "Thursday"=>"星期四",
  11. "Friday"=>"星期五",
  12. "Saturday"=>"星期六",
  13. "Sunday"=>"星期日");
  14. var_dump($arr1);
  15. echo "<br>";
  16. // 由于PHP是弱类型语言,数组中的元素可以是任意类型
  17. $arr2 = ["Monday"=>"星期一",
  18. "Tuesday"=>"星期二",
  19. "Wednesday"=>"星期三",
  20. "Thursday"=>"星期四",
  21. "Friday"=>"星期五",
  22. "Saturday"=>"星期六",
  23. "Sunday"=>"星期日"];
  24. var_dump($arr2);
  25. echo "<br>";
  26. // 定义

4.向数组中添加元素

  • 索引数组

    1. <?php
    2. header("content-type:text/html;charset=utf-8");
    3. //
    4. $arr1 = array();
    5. var_dump($arr1);
    6. echo "<br>";
    7. // 指定下标方式添加数据
    8. $arr1[0] = 111;
    9. var_dump($arr1);
    10. echo "<br>";
    11. $arr1[1] = 222;
    12. var_dump($arr1);
    13. echo "<br>";
    14. // 不指定下标,追加到最后
    15. $arr1[] = 333;
    16. var_dump($arr1);
    17. echo "<br>";
    18. $arr1[5] = 555;
    19. var_dump($arr1);
    20. echo "<br>";
    21. // 这个元素的下标是多少?
    22. $arr1[] = 666;
    23. var_dump($arr1);
    24. echo "<br>";
    25. ?>
  • 关联数组

    1. <?php
    2. header("content-type:text/html;charset=utf-8");
    3. // 由于PHP是弱类型语言,数组中的元素可以是任意类型
    4. $arr2 = [];
    5. var_dump($arr2);
    6. echo "<br>";
    7. $arr2["one"] = 111;
    8. var_dump($arr2);
    9. echo "<br>";
    10. $arr2["two"] = 222;
    11. var_dump($arr2);
    12. echo "<br>";
    13. // 关联数组中允许使用混合key, 但是只能是int 或string
    14. // 如果不写key, 默认从 0 开始存放,如果前面有数字key,则接续保存
    15. $arr2[] = 333;
    16. var_dump($arr2);
    17. echo "<br>";
    18. $arr2[] = 444;
    19. var_dump($arr2);
    20. echo "<br>";
    21. ?>

5. 获取数组中元素个数

  1. count(Countable|array $value, int $mode = COUNT_NORMAL): int

统计出数组里的所有元素的数量

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
  4. echo count($arr1);
  5. echo "<br>";
  6. // 由于PHP是弱类型语言,数组中的元素可以是任意类型
  7. $arr2 = ["Monday"=>"星期一",
  8. "Tuesday"=>"星期二",
  9. "Wednesday"=>"星期三",
  10. "Thursday"=>"星期四",
  11. "Friday"=>"星期五",
  12. "Saturday"=>"星期六",
  13. "Sunday"=>"星期日"];
  14. echo count($arr2);
  15. ?>

6. 获取数组中的元素

对数组进行取值时,不区分数组类型

  1. 数组名[索引/下标];
  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
  4. echo $arr1[0];
  5. echo "<br>";
  6. echo $arr1[5];
  7. echo "<br>";
  8. // 索引数组在访问下标越界时,会报错
  9. // echo $arr1[10];
  10. // echo "<br>";
  11. // 由于PHP是弱类型语言,数组中的元素可以是任意类型
  12. $arr2 = ["Monday"=>"星期一",
  13. "Tuesday"=>"星期二",
  14. "Wednesday"=>"星期三",
  15. "Thursday"=>"星期四",
  16. "Friday"=>"星期五",
  17. "Saturday"=>"星期六",
  18. "Sunday"=>"星期日"];
  19. echo $arr2["Monday"];
  20. echo "<br>";
  21. echo $arr2["Saturday"];
  22. echo "<br>";
  23. // 关联数组在使用一个未定义的key取值时会报错
  24. // echo $arr2["xxx"];
  25. // echo "<br>";
  26. ?>

7. 修改数组中的元素值

  1. 数组名[索引/下标] = 值;

修改数据和添加数组类似,如果指定 的索引或 key 不存在,就是添加, 存在就是修改.

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
  4. var_dump($arr1);
  5. echo "<br>";
  6. $arr1[0] = "星期一";
  7. var_dump($arr1);
  8. echo "<br>";
  9. $arr1[0] = "周一";
  10. var_dump($arr1);
  11. echo "<br>";
  12. $arr2 = ["Monday"=>"星期一",
  13. "Tuesday"=>"星期二",
  14. "Wednesday"=>"星期三",
  15. "Thursday"=>"星期四",
  16. "Friday"=>"星期五",
  17. "Saturday"=>"星期六",
  18. "Sunday"=>"星期日"];
  19. var_dump($arr2);
  20. echo "<br>";
  21. $arr2["Monday"] = "星期一";
  22. var_dump($arr2);
  23. echo "<br>";
  24. $arr2["Monday"] = "周一";
  25. var_dump($arr2);
  26. echo "<br>";
  27. ?>

8. 删除数组/数组中的元素

在php中, 可以使用 unset() 函数来删除数组或数组中元素的值.

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
  4. var_dump($arr1);
  5. echo "<br>";
  6. unset($arr1[0]);
  7. var_dump($arr1);
  8. echo "<br>";
  9. // 删除之后再使用会报错
  10. unset($arr1);
  11. var_dump($arr1);
  12. echo "<br>";
  13. $arr2 = ["Monday"=>"星期一",
  14. "Tuesday"=>"星期二",
  15. "Wednesday"=>"星期三",
  16. "Thursday"=>"星期四",
  17. "Friday"=>"星期五",
  18. "Saturday"=>"星期六",
  19. "Sunday"=>"星期日"];
  20. var_dump($arr2);
  21. echo "<br>";
  22. unset($arr2["Monday"]);
  23. var_dump($arr2);
  24. echo "<br>";
  25. // 删除之后再使用会报错
  26. unset($arr2);
  27. var_dump($arr2);
  28. echo "<br>";
  29. ?>

9. 遍历数组

foreach 语法结构提供了遍历数组的简单方式。

  1. foreach (iterable_expression as $value)
  2. statement
  3. foreach (iterable_expression as $key => $value)
  4. statement

第一种格式遍历给定的 iterable_expression 迭代器。每次循环中,当前单元的值被赋给 $value

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

  1. <?php
  2. header("content-type:text/html;charset=utf-8");
  3. $arr1 = array( "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
  4. // 不带下标遍历
  5. foreach ($arr1 as $val) {
  6. echo "值:" . $val . "<br>";
  7. }
  8. // 带下标遍历
  9. foreach ($arr1 as $i => $val) {
  10. echo "下标:" . $i . "-> 值:" . $val . "<br>";
  11. }
  12. echo "<hr>";
  13. $arr2 = ["Monday"=>"星期一",
  14. "Tuesday"=>"星期二",
  15. "Wednesday"=>"星期三",
  16. "Thursday"=>"星期四",
  17. "Friday"=>"星期五",
  18. "Saturday"=>"星期六",
  19. "Sunday"=>"星期日"];
  20. // 不带下标遍历
  21. foreach ($arr2 as $val) {
  22. echo "值:" . $val . "<br>";
  23. }
  24. // 带下标遍历
  25. foreach ($arr2 as $key => $val) {
  26. echo "key:" . $key . "-> value:" . $val . "<br>";
  27. }
  28. ?>

10. 多维数组

在 PHP 中,一个数组中的值可以是另一个数组,另一个数组中的值也可以是一个数组,也就是说数组可以嵌套。

一维数组:没有发生嵌套的普通数组。

二维数组:两层数组的嵌套。

三维数组:三层数组的嵌套。

多维数组:多层数组的嵌套。

  • 定义二维数组

    1. $arr = array(
    2. array("id"=>1,"userName"=>"张三","sex"=>"男","age"=>15),
    3. array("id"=>2,"userName"=>"李四","sex"=>"女","age"=>14),
    4. array("id"=>3,"userName"=>"王五","sex"=>"女","age"=>16),
    5. array("id"=>4,"userName"=>"赵六","sex"=>"男","age"=>15),
    6. array("id"=>5,"userName"=>"田七","sex"=>"女","age"=>16)
    7. );
  • 二维数组取值

    1. echo $arr[0][id];
    2. echo $arr[3]["username"];