前言
最近在系统的学习 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";}/* outputFred35Wilma */foreach ($arr as $key => $value) {echo "Fred's {$key} is {$value}\n";}/* outputFred's name is FredFred's age is 35Fred'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: 数组的键值互换。
感谢你看到了这里。如果文章有错误,请评论指正,谢谢!
