前言
最近在系统的学习 PHP ,参考的资料是《PHP编程》+ 官方文档(如果你有好的学习资料,欢迎推荐给我)。虽然这本《PHP编程》是基于 PHP5 的,但我笔记里的代码,全部在 PHP 7.2 的环境里测试过,是能够运行的。另,本笔记中只记录我模糊不清的知识。
索引数组和关联数组
- 索引(indexed):键名是整数并且从 0 开始。
- 关联(associative):键名是字符串。
注:PHP 内部将所有的数组都存储为关联数组。
## 在数组末尾添加值
向一个已存在的索引数组末尾添加更多的值,可以使用 []
语法。
$family = array("Fred","Wilma");
$family[] = "Pebbles"; // $family[2] 是 "Pebbles"
如果该数组为关联数组,则添加的索引为 0 。
$family = array('name' => "Wilma");
$family[] = "Pebbles"; // $family[0] 是 "Pebbles"
遍历数组
// 样例数组
$arr = array('name' => "Fred",'age' => 35,'wife' => "Wilma");
$arr1 = array("Fred", 35, "Wilma");
foreach
foreach ($arr as $val) {
echo "{$val}\n";
}
/* output
Fred
35
Wilma */
foreach ($arr as $key => $value) {
echo "Fred's {$key} is {$value}\n";
}
/* output
Fred's name is Fred
Fred's age is 35
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 /
### 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
: 根据offset
和length
参数返回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
数组中由offset
和length
指定的元素去掉,如果提供了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[, ...]):int
和array_pop(&array):mixed
模拟堆栈。array_shift(&array, value1[, ...]):int
和array_unshift(&array):mixed
模拟队列。array_flip(array):array
: 数组的键值互换。
感谢你看到了这里。如果文章有错误,请评论指正,谢谢!