数组可以在单独的变量名中存储一个或多个值,在PHP中是最常见的数据结构,非常重要。

PHP中创建数组

1. 使用array()函数来构件数组

  1. <?php
  2. // [1] 类型单一的数组
  3. $arr1 = array('a', 'b', 'c');
  4. print_r($arr1);
  5. /*
  6. Array
  7. (
  8. [0] => a
  9. [1] => b
  10. [2] => c
  11. )
  12. */
  13. // [2] 混合类型的数组
  14. $arr2 = array('a', 'b', 2, 2.4);
  15. print_r($arr2);
  16. /*
  17. Array
  18. (
  19. [0] => a
  20. [1] => b
  21. [2] => 2
  22. [3] => 2.4
  23. )
  24. // [3] 键值类型的数组
  25. $arr3 = array(0 => 'a', 'c' => 'b', 2, 2.4);
  26. print_r($arr3);
  27. /*
  28. Array
  29. (
  30. [0] => a
  31. [c] => b
  32. [1] => 2
  33. [2] => 2.4
  34. )
  35. */
  36. */

2. 使用变量名称+索引值来创建数组

  1. <?php
  2. // [1] 不指定下标添加元素,就像入栈 push 将每次添加的元素都从末尾加入。
  3. // 而且,数组下标默认从0开始累加。
  4. $arr1[] = 1;
  5. $arr1[] = 2;
  6. $arr1[] = 3;
  7. print_r($arr1);
  8. /*
  9. Array
  10. (
  11. [0] => 1
  12. [1] => 2
  13. [2] => 3
  14. )
  15. */
  16. // [2] 指定数组下标加入元素,注意看哪怕3>2>1,数组中元素的排列顺序还是按照默认的末尾添加顺序
  17. $arr2[3] = 6;
  18. $arr2[2] = 4;
  19. $arr2[1] = 2;
  20. print_r($arr2);
  21. /*
  22. Array
  23. (
  24. [3] => 6
  25. [2] => 4
  26. [1] => 2
  27. )
  28. */

3. 类似于js的[]方式,好处是看起来便捷

  1. <?php
  2. // 从第二个打印数组的结构中,我们可以明确得出这样一个结论:如果没有指定索引也就是键,它默认从0开始
  3. $arr3 = [1, 2, 3];
  4. $arr4 = ['a' => 1, 2, 'b' => 3];
  5. print_r($arr3);
  6. print_r($arr4);
  7. /*
  8. Array
  9. (
  10. [0] => 1
  11. [1] => 2
  12. [2] => 3
  13. )
  14. Array
  15. (
  16. [a] => 1
  17. [0] => 2
  18. [b] => 3
  19. )
  20. */

如果我们是这样一个混乱的数组呢,再来看一下

  1. <?php
  2. $arr = ['a' => 1, 3 => 2, 1 => 3, 'c' => 4, 5];
  3. print_r($arr);
  4. /*
  5. Array
  6. (
  7. [a] => 1
  8. [3] => 2
  9. [1] => 3
  10. [c] => 4
  11. [4] => 5
  12. )
  13. 我们可以看到,5的索引是数字4.这就表示它会自动寻找并添加一个最大的数字给
  14. 没有指定的元素,而且是从左到右。哈哈
  15. */

小结

PHP中的数组分类

  1. 索引数组
  2. 关联数组
  3. 多维数组

PHP中数组的特点

  1. 数据类型可以不同
  2. 以键值对的形式存在
  3. 默认数组下标从0开始,一次叠加
  4. 它不想Java中的数据是定长的
  5. 如果不指定默认的索引,会自动计算出最大的数字作为索引,从左到右。
  6. 默认添加是,末尾添加

PHP数组的遍历

1. for循环遍历

  1. <?php
  2. // [1] 遍历普通数值型索引数组
  3. $arr = [5, 2, 1, 2, 4, 7];
  4. for ($i = 0; $i < count($arr); $i++) {
  5. echo $arr[$i] . "\t";
  6. }
  7. // 5 2 1 2 4 7

2. foreach循环遍历

  1. <?php
  2. // [1] 遍历非数值索引的关联数组-我们可以选择将键和值都输出查看
  3. $age = array("Bill" => "63", "Steve" => "56", "Elon" => "47");
  4. foreach ($age as $x => $x_value) {
  5. echo "key:$x, value:$x_value \t";
  6. }
  7. // key:Bill, value:63 key:Steve, value:56 key:Elon, value:47
  8. // [2] 我们也可以只查看值不看键
  9. foreach ($age as $value) {
  10. echo "value:$value \t";
  11. }
  12. // value:63 value:56 value:47

3. PHP 中的 foreach循环

  • PHP中的foreach只能对数组和对象使用,对于其它的数据类型会报错
  • 有两种结构
    • 1️⃣ foreach($arr as $value) : 只需要键值对中的值
    • 2️⃣ foreach($arr as $key => $value):键值对中的值和键我都需要
  • foreach 开始执行时,数组内部的指针会自动指向第一个单元。不需要在 foreach 循环之前调用 reset()
  • foreach 依赖内部数组指针,在循环中修改其值将可能导致意外的行为。
  • 一般我自己不愿意在foreach() 内部修改值,但其实这也是可以的
  1. <?php
  2. // [1] 通过foreach 将数组内部的元素x2
  3. $arr = array(1, 2, 3, 4);
  4. foreach ($arr as &$value) {
  5. $value = $value * 2;
  6. }
  7. print_r($arr);
  8. unset($value); // 最后取消掉引用
  9. /*
  10. Array
  11. (
  12. [0] => 2
  13. [1] => 4
  14. [2] => 6
  15. [3] => 8
  16. )
  17. */
  18. // [2] 变量则不行
  19. foreach (array(1, 2, 3, 4) as &$value) {
  20. $value = $value * 2;
  21. }
  22. print_r($arr);

PHP数组的深入分析


PHP数组的排序

1. sort()-由低到高,不保留原索引

  • 作用:对数组进行排序由低到高。
  • 参数:
    • 1️⃣:需要被排序的数组
    • 2️⃣:(可选参数)排序的类型标记
      • SORT_REGULAR - 正常比较单元(不改变类型)
      • SORT_NUMERIC - 单元被作为数字来比较
      • SORT_STRING - 单元被作为字符串来比较
      • SORT_LOCALE_STRING - 根据当前的区域(locale)设置来把单元当作字符串比较,可以用 setlocale() 来改变。
      • SORT_NATURAL - 和 natsort() 类似对每个单元以”自然的顺序”对字符串进行排序。 PHP 5.4.0 中新增的。
      • SORT_FLAG_CASE - 能够与 SORT_STRINGSORT_NATURAL 合并(OR 位运算),不区分大小写排序字符串。
  • 返回值:
    • 成功返回True
    • 失败返回false

默认升序,数字由小到大排序,字母abcd排序,会重新排列键值,从新排列的索引从新按照0,1,2 这样的来排列

  1. <?php
  2. // [1] 不使用参数 对数字数组
  3. $arr1 = [5, 2, 1, 2, 4, 7];
  4. sort($arr1);
  5. print_r($arr1);
  6. /*
  7. Array
  8. (
  9. [0] => 1
  10. [1] => 2
  11. [2] => 2
  12. [3] => 4
  13. [4] => 5
  14. [5] => 7
  15. )
  16. */
  17. // [2] 不使用参数对 字符数组
  18. $arr2 = ['bbb', 'apple', 'km', 'cs'];
  19. sort($arr2);
  20. print_r($arr2);
  21. /*
  22. Array
  23. (
  24. [0] => apple
  25. [1] => bbb
  26. [2] => cs
  27. [3] => km
  28. )
  29. */
  30. // [3] 对关联数组
  31. $arr3 = ['b' => 'b', 'a' => 'a', 'k' => 'k', 'c' => 'c'];
  32. sort($arr3);
  33. print_r($arr3);
  34. /*
  35. Array
  36. (
  37. [0] => a
  38. [1] => b
  39. [2] => c
  40. [3] => k
  41. )
  42. */

2. asort()-会保持索引关系

3. rsort()-降序排列

4. arsort()-根据值,以降序对关联数组进行排序

5. ksort()—根据键,以升序对关联数组进行排序

6. krsort()-根据键,以降序对关联数组进行排序