PHP 数组处理实战:创建、操作与排序详解
在 PHP 开发中,高效处理数据离不开对数组的熟练运用。本文将深入解析数组的创建、键值操作、遍历逻辑及多维排序技巧,并结合具体代码案例,帮助你掌握从数据录入到整理输出的完整工作流。
数组的创建与初始化
数组是 PHP 中最常用的数据结构之一。除了基础的 array() 函数外,还有多种动态创建数组的方式,能够显著提高代码的灵活性。
第1步:利用变量动态建立数组
目的:将当前符号表中的变量快速转换为数组结构。
入口:compact() 函数用于收集变量并生成数组,变量名作为键,变量内容作为值;extract() 则执行反向操作,将数组单元转为独立变量。
动作:
<?php
$num = 10;
$str = "string";
$array = array(1, 2, 3);
// compact 将变量转为数组,键名为变量名
$newarray = compact("num", "str", "array");
print_r($newarray);
/* 结果:
Array
(
[num] => 10
[str] => string
[array] => Array ([0] => 1 [1] => 2 [2] => 3)
)
*/
// extract 将数组转回变量
$test_array = array("key1" => 1, "key2" => 2, "key3" => 3);
extract($test_array);
echo "$key1 $key2 $key3"; // 输出: 1 2 3
?>
第2步:使用关联与范围函数创建
目的:基于两个现有数组或指定数值范围快速构建新数组。
动作:
- array_combine():使用一个数组的值作为键名,另一个数组的值作为相应值。
<?php
$a = array('green', 'red', 'yellow');
$b = array(' avocado ', ' apple ', ' banana ');
$c = array_combine($a, $b);
print_r($c);
?>
- range():创建包含指定范围内单元的数组,支持整数和字符序列。
键名与值的常用操作
在实际应用中,我们经常需要检查、提取或修改数组内部的键与值。
第1步:检查键与值的存在性
参数说明:isset() 在键为 null 时返回 false,而 array_key_exists() 即使值为 null 也会返回 true;in_array() 用于检查值是否存在;array_search() 返回键名,不存在则返回 null。
第2步:赋值与填充工具
list() 结构:将数组中的值赋给一系列变量,常用于遍历时的解构。
<?php
$arr = array("红色", "蓝色", "白色");
list($red, $blue, $white) = $arr;
echo $red; // 红色
?>
其他工具:
array_fill()/array_fill_keys():用给定值填充数组。array_flip():交换键名和值,若值重复,新数组只保留最后一个出现的原键。array_keys()/array_values():分别提取所有键名或所有值生成新数组。array_splice():删除并替换数组片段。array_unique():移除重复值,保持原有索引关系(除非使用 SORT_NUMERIC 等标志)。
数组的遍历与输出
遍历数组是数据处理的核心环节,PHP 提供了多种循环结构以适应不同场景。
第1步:使用 foreach 进行结构化遍历
优势:foreach 是最推荐的遍历方式,能同时访问键名和值,且无需手动管理指针。
<?php
$color = array("a" => "red", "blue", "white");
// 仅输出值
foreach ($color as $value) {
echo $value . "<br>";
}
// 输出键名 => 值
foreach ($color as $key => $value) {
echo "$key => $value<br>";
}
?>
第2步:综合应用——学生成绩录入系统
场景:模拟表单提交,接收多个学生成绩,找出不及格分数并计算平均分。
<?php
echo "<form method=post>";
for ($i = 1; $i < 6; $i++) {
echo "学生$i的成绩:<input type=text name='stu[]' ><br>";
}
echo "<input type=submit name=bt value='提交'></form>";
if (isset($_POST['bt'])) {
$sum = 0;
$k = 0;
$sco = array(); // 存储不及格成绩
$stu = $_POST['stu'];
$num = count($stu);
foreach ($stu as $score) {
$sum += $score;
if ($score < 60) {
$sco[$k++] = $score;
}
}
echo "低于60分的成绩有:";
echo implode("<br>", $sco);
echo "<br>平均分为:" . ($num ? $sum / $num : 0);
}
?>
数组排序与高级操作
当数据需要按特定顺序展示时,排序函数至关重要。对于多维数据,排序逻辑需要更精细的控制。
第1步:一维数组的基础排序
- 升序:
sort()(重索引)、asort()(保关联)、ksort()(按键名升序)。 - 降序:
rsort()、arsort()、krsort()。 - 随机与反转:
shuffle()(打乱并重索引)、array_reverse()(保持索引或重置)。 - 自然排序:
natsort(),适用于包含数字的文件名或版本号排序。
第2步:多维数组与表格数据处理
场景:接收学号、姓名、成绩的多行表单输入,按成绩升序排列后以表格输出,并支持查询。
- 接收数据:通过表单提交,使用
[]后缀自动将同名字段存入数组。 - 多维排序:使用
array_multisort()。第一个参数为主要排序字段,后续参数依次排序。 - 重组数据结构:将平行数组(XH, XM, CJ)合并为二维数组以便逐行渲染。
<?php
if (isset($_POST['bt_stu'])) {
$XH = $_POST['XH'];
$XM = $_POST['XM'];
$CJ = $_POST['CJ'];
// 以成绩为首要条件排序
array_multisort($CJ, $XH, $XM);
// 重组为二维数组
$sum = [];
for ($i = 0; $i < count($XH); $i++) {
$sum[$i] = [$XH[$i], $XM[$i], $CJ[$i]];
}
// 输出表格...
foreach ($sum as $row) {
list($id, $name, $score) = $row;
echo "<tr><td>$id</td><td>$name</td><td>$score</td></tr>";
}
// 搜索特定学生
reset($sum);
while (list($key, $value) = each($sum)) {
list($id, $name, $score) = $value;
if ($id == "081101") {
echo "找到学生:$name, 成绩: $score";
break;
}
}
}
?>
以上介绍了 PHP 数组从基础创建到复杂排序处理的完整技能树。掌握 compact/extract 的变量转换、foreach 的安全遍历以及 array_multisort 的多维排序,能应对大多数 Web 开发中的数据整理需求。以上就是 PHP 数组处理实战的详细内容,更多关于 PHP 基础教程的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













