前言

最近在系统的学习 PHP ,参考的资料是《PHP编程》+ 官方文档(如果你有好的学习资料,欢迎推荐给我)。虽然这本《PHP编程》是基于 PHP5 的,但我笔记里的代码,全部在 PHP 7.2 的环境里测试过,是能够运行的。另,本笔记中只记录我模糊不清的知识。

索引数组和关联数组

  • 索引(indexed):键名是整数并且从 0 开始。
  • 关联(associative):键名是字符串。

注:PHP 内部将所有的数组都存储为关联数组。
## 在数组末尾添加值
向一个已存在的索引数组末尾添加更多的值,可以使用 [] 语法。

  1. $family = array("Fred","Wilma");
  2. $family[] = "Pebbles"; // $family[2] 是 "Pebbles"

如果该数组为关联数组,则添加的索引为 0 。

  1. $family = array('name' => "Wilma");
  2. $family[] = "Pebbles"; // $family[0] 是 "Pebbles"

遍历数组

  1. // 样例数组
  2. $arr = array('name' => "Fred",'age' => 35,'wife' => "Wilma");
  3. $arr1 = array("Fred", 35, "Wilma");

foreach

  1. foreach ($arr as $val) {
  2. echo "{$val}\n";
  3. }
  4. /* output
  5. Fred
  6. 35
  7. Wilma */
  8. foreach ($arr as $key => $value) {
  9. echo "Fred's {$key} is {$value}\n";
  10. }
  11. /* output
  12. Fred's name is Fred
  13. Fred's age is 35
  14. Fred's wife is Wilma */

迭代器

每个 PHP 数组都会跟踪当前所处理的元素,指向当前元素的指针被称为迭代器。迭代器的函数如下:

  • current(&array):mixed : 返回迭代器当前指向的元素
  • reset(&array):mixed : 移动迭代器到数组中第一个元素
  • next(&array):mixed : 移动迭代器到数组下一个元素
  • prev(&array):mixed : 移动迭代器到数组上一个元素
  • end(&array):mixed : 移动迭代器到数组中最后一个元素
  • each(&array):array : 以数组的形式返回当前元素的键和值,并移动迭代器到下一个元素。
  • key(&array):mixed : 返回当前元素的键 ``` while (list($key, $value) = each($arr)) { echo “Fred’s {$key} is {$value}\n”; } // 会弹出警告 / output Fred’s name is Fred Fred’s age is 35 Fred’s wife is Wilma /
  1. ### for

$arr1count = count($arr1);

for ($i = 0; $i < $arr1count; $i++) { $value = $arr1[$i]; echo “{$value}\n”; } / output Fred 35 Wilma /

```

排序

| 效果 | 升序 | 降序 | 用户自定义函数 | | —- | —- | —- | —- |

| 按值排序数组,然后从 0 开始重新分配索引 | sort() | rsort() | usort(&array, callback) |

| 按值排序 | asort() | arsort() | uasort(&array, callback) |

| 按键排序 | ksort() | krsort() | uksort(&array, callback) |

  • natsort(&array):bool : 按照自然顺序,升序排序。
  • natcasesort(&array):bool : 不区分大小写,按照自然顺序,升序排序。
  • array_multisort() : 对多个索引数组进行排序。

    数组函数

  • array(…):array : 创建一个数组。

  • count(array)sizeof(array) 获取数组中元素的个数。
  • list(varl[, …]):array : 不是真正的函数,而是一个语言结构。它会把数组中的值赋给一组变量。
  • array_slice(array, offset, length=NULL):array : 根据 offsetlength 参数返回 array 数组中的一段序列。
  • array_chunk(array, size[, preserve_keys = false]):array : 将一个数组分割成多个数组,其中每个数组的单元数目由 size 决定。第三个参数 preserve_keys 设置为 true 可以保留数组中原来的键名,默认从零开始新数字索引。
  • array_keys(array[, search_value=null[, strict=false]]):array : 返回 array 数组中的键名。如果指定 search_value ,则只返回该值的键名,否则将返回全部键名。strict 则是指定搜索时是否使用严格模式( === )。
  • array_values(array):array : 返回 array 数组中值的数组。
  • array_key_exists(key,array):bool : 检查数组里是否有指定的 key 。如果该键的值为 NULL ,该函数将返回 true
  • isset(var[, ...]):bool : 检查变量是否存在,并且不为 NULL
  • array_splice(array1, offset[, length=count(array1)[, replacement=array()]]):array : 把 array1 数组中由 offsetlength 指定的元素去掉,如果提供了 replacement 参数,则用其中的元素取代。
  • extract(&array[, flags=EXIR_OVERWRITE[, prefix=NULL]]):int : 将变量从数组中导入到当前的符号表中。
  • compact(varname1[, ...]):array : 创建一个包含变量名与其值的数组。该函数会创建一个关联数组。
  • array_walk(&array, callback, $userdata=NULL):bool : 为数组中的每个元素调用用户自定义的函数。自定义函数接受三个参数:第一个是元素的值,第二个是元素的键,第三个是 array_walk() 的第三个参数。
  • array_reduce() : 与 array_walk() 参数相同,不同的是,他将依次迭代数组每个元素得到单个值。
  • in_array(needle, haystack[, strict=false]):bool : 在 haystack 中搜索 needle 是否存在,strict 将设置是否严格匹配。
  • array_fliter(array, callback[, flag=0]):array : 使用 callback 函数来过滤 array
  • array_push(&array, value1[, ...]):intarray_pop(&array):mixed 模拟堆栈。
  • array_shift(&array, value1[, ...]):intarray_unshift(&array):mixed 模拟队列。
  • array_flip(array):array : 数组的键值互换。

感谢你看到了这里。如果文章有错误,请评论指正,谢谢!