本文共 5770 字,大约阅读时间需要 19 分钟。
PHP数组是PHP编程中最强大的数据结构之一,能够灵活存储和操作数据。本文将从基础到高级功能,全面解析PHP数组的使用方法。
PHP数组根据下标的不同分为两种类型:
索引数组
索引数组的下标是数字,依次从0开始增长。例如:$arr1 = [1, 2, 3, 4, 5, 6];
索引数组的特点是键为整数,值与键值一一对应。
关联数组
关联数组的下标是字符串,每个键名与对应的值一一对应。例如:$arr2 = array( "one" => 1, "two" => 2, "three" => 3);
关联数组的键可以是数字字符串,例如 "10", "08" 等,仍然是关联数组而不是索引数组。
PHP支持三种方式声明数组:
$arr = array( 1 => "one", 2 => "two", 3 => "three");
$arr = [1, 2, 3, "one" => 4, 6];
Array() 函数声明数组:$arr = array(1, 2, 3, 4, 5);
PHP数组支持两种方式读取元素:
$arr = [1, 2, 3, "one" => 4];echo $arr[0]; // 输出1echo $arr["one"]; // 输出4
$arr = [1, 2, 3, "one" => 4];echo $arr{"one"}; // 输出4多维数组是指数组中的某个元素本身也是一个数组。多维数组通常用于存储嵌套数据结构。例如:
$h51701 = array( "gruop1" => array( array("name" => "张三", "age" => 14, "sex" => "男"), array("name" => "张三", "age" => 14, "sex" => "男"), array("name" => "张三", "age" => 14, "sex" => "男") ), "gruop2" => array( array("name" => "张三", "age" => 14, "sex" => "男"), array("name" => "张三", "age" => 14, "sex" => "男"), array("name" => "张三", "age" => 14, "sex" => "男") ), "gruop3" => array( array("name" => "张三", "age" => 14, "sex" => "男"), array("name" => "张三", "age" => 14, "sex" => "男"), array("name" => "张三", "age" => 14, "sex" => "男") )); 多维数组的下标可以是数字或字符串,子数组可以是普通值或数组。
for循环适用于纯索引数组:
$arr = array(1, 2, 3, 5, 6, 7);$num = count($arr);for ($i = 0; $i < $num; $i++) { echo "$i -> $arr[$i]\n";} foreach循环适用于任何类型的数组:
$arr = array(1, 2, 3, "one" => 4, 5, 6, 7);foreach ($arr as $item) { echo "$item\n";}foreach ($arr as $key => $item) { echo "$key -> $item\n";} list() 函数用于将数组值分配给变量:
$arr = array(1, 2, 3);list($a, $b, $c) = $arr;
each() 函数用于遍历数组并返回键值对:
$arr = array(1, 2, 3);while (list($key, $value) = each($arr)) { echo "$key -> $value\n";} while循环配合 each() 或 list() 可实现自定义遍历方式。
PHP 提供了丰富的数组函数,用于操作数组:
array_values():提取所有值,去除键名:
$arr = array("a" => 1, "b" => 2);var_dump(array_values($arr)); // 输出: [1, 2]array_keys():提取所有键名:
var_dump(array_keys($arr)); // 输出: ["a", "b"]
in_array():检查数组中是否包含某个值:
var_dump(in_array(8, $arr, true)); // true
array_flip():交换键和值:
var_dump(array_flip($arr)); // 输出: [1 => "a", 2 => "b"]
array_reverse():反转数组:
var_dump(array_reverse($arr, true)); // 输出: [2, 1]
array_count_values():统计值出现次数:
$arr = array(1, 2, 3, 4, 5, 6, "a" => 7, "b" => 8, "c" => 9, 10);var_dump(array_count_values($arr)); // 输出: [1 => 1, 2 => 1, 3 => 1, 4 => 1, 5 => 1, 6 => 1, "a" => 1, "b" => 1, "c" => 1, 10 => 1]
PHP 提供多种排序函数:
sort() 和 rsort():按升序或降序排序:
$arr = array(3, 1, 2, 4);sort($arr); // 输出: [1, 2, 3, 4]rsort($arr); // 输出: [4, 3, 2, 1]
usort() 和 uasort():使用自定义比较函数:
$arr = array(3, 1, 2, 4);usort($arr, function($a, $b) { return $a - $b;});或者:
usort($arr, function($a, $b) { return $b - $a; // 降序});ksort() 和 krsort():按键名排序:
$arr = array("b" => 2, "a" => 1, "c" => 3);ksort($arr); // 输出: ["a" => 1, "b" => 2, "c" => 3]krsort($arr); // 输出: ["c" => 3, "b" => 2, "a" => 1]**natsort() 和 **natcasesort()****:自然排序:
$arr = array(3, "a", 2, "b");natsort($arr); // 输出: [2, 3, "a", "b"]
array_slice():截取数组部分:
$arr = array(1, 2, 3, 4, 5);$slice = array_slice($arr, 2, 5); // 输出: [3, 4, 5]
array_splice():删除或替换数组元素:
$arr = array(1, 2, 3, 4, 5);$spliced = array_splice($arr, 4, 5, [0, 0, 0, 0]); // 输出: [0, 0, 0, 0]var_dump($arr); // 输出: [1, 2, 3, 4]
array_merge():合并数组:
$arr1 = array(1, 2, "a" => 4, "10" => 5);$arr2 = array(6, 7, "a" => 9, "10" => 0);$merged = array_merge($arr1, $arr2);var_dump($merged); // 输出: [0 => 1, 1 => 2, "a" => 9, "10" => 0]
array_intersect() 和 array_diff():求交集和差集:
$arr1 = array(1, 2, 9, "a" => 4, 5);$arr2 = array(6, 7, 8, "a" => 9, "10" => 5);$intersect = array_intersect($arr1, $arr2); // 输出: [9, 5]$diff = array_diff($arr1, $arr2); // 输出: [1, 2, 4]
PHP 提供 next()、prev()、end()、reset() 等函数,用于数组的遍历和指针操作:
$arr = array(1, 2, 3, 4, 5);$element = current($arr); // 输出: 1$element = next($arr); // 输出: 2
PHP 提供了一组超全局数组,用于获取服务器信息和环境变量:
$_SERVER:服务器变量,包含浏览器信息、脚本路径等。$_ENV:环境变量,需要在 php.ini 中调整。$_GET 和 $_POST:获取和提交的数据。$_FILES:文件上传变量。$_COOKIE:cookie 变量。$_SESSION:会话变量。$_GLOBALS:包含所有超全局数组。例如:
var_dump($_SERVER); // 输出包含浏览器头信息的数组echo $_SERVER["HTTP_USER_AGENT"]; // 输出浏览器信息
// 计算数组元素个数$num = count($arr);// 统计值出现次数$counts = array_count_values($arr);// 去重并保留第一个值$unique = array_unique($arr);// 过滤空值$filtered = array_filter($arr, function($num) { return $num > 4;}); 使用 array_walk()、array_map()、call_user_func() 等函数执行回调:
$fruits = array("a" => "lemon", "b" => "orange", "c" => "apple");array_walk($fruits, function($item, $key) { echo "$key -> $item\n";}); 函数名需符合小驼峰法则,不能与系统函数名重复:
function myFunction() { // 函数体} static 关键字,仅在函数内声明一次,保留到脚本终止。function func($a) { return $a + 10;}echo func(10); // 输出: 20function func(&$a) { $a += 10;}$a = 10;func($a);echo $a; // 输出: 20function func($b = 10, $a = 5) { return $a + $b;}func(30); // $a = 5, $b = 10匿名函数(closure)可直接使用:
$func = function($param) { echo "匿名函数处理了 $param\n";};$func(10); 递归函数可以调用自身:
function factorial($num) { static $result = 1; if ($num > 0) { $result *= $num; factorial(--$num); } return $result;}echo factorial(10); // 输出: 3628800 // 导入外部文件require 'function.php';include 'function.php';
闭包可以引用父函数的变量,需使用 use 关键字:
$closure = function($param) use ($var) { echo "闭包访问 $param 和 $var\n";};$var = 10;$closure(5); PHP 数组是灵活的数据结构,支持多种操作和高级功能,可满足复杂数据处理需求。通过合理使用数组函数和高级操作,可以显著提升代码的简洁性和效率。
转载地址:http://edtfk.baihongyu.com/