在PHP开发中,通过数据库查询获取多条记录后,返回的结果通常是二维数组结构,实际业务场景中经常需要对这些数组进行格式转换、字段提取、分组处理等操作,掌握正确的处理方式能大幅提升开发效率。

基础遍历处理方式
最基础的处理方式是使用循环遍历记录数组,逐条处理每条记录的内容,这种方式灵活性最高,适合需要自定义复杂处理逻辑的场景。
假设我们通过mysqli查询得到的多条记录数组为$records,结构如下:
<?php
// 模拟数据库查询返回的二维记录数组
$records = [
['id' => 1, 'name' => '张三', 'age' => 20, 'class' => '一班'],
['id' => 2, 'name' => '李四', 'age' => 21, 'class' => '二班'],
['id' => 3, 'name' => '王五', 'age' => 20, 'class' => '一班'],
];
?>
如果需要提取所有用户的姓名组成新数组,使用foreach遍历处理:
<?php
$name_list = [];
foreach ($records as $item) {
$name_list[] = $item['name'];
}
// 输出结果:['张三', '李四', '王五']
print_r($name_list);
?>
使用内置函数高效转换
PHP提供了多个数组处理内置函数,可以快速完成常见的记录数组转换操作,减少循环代码的编写。
提取单列数据:array_column
如果需要从二维记录数组中提取某一列的所有值,或者按指定字段作为新数组的键,使用array_column函数是最优选择。
提取所有用户ID:
<?php $id_list = array_column($records, 'id'); // 输出结果:[1, 2, 3] print_r($id_list); ?>
按用户ID作为键重组数组:
<?php $record_map = array_column($records, null, 'id'); // 输出结果: // [ // 1 => ['id' => 1, 'name' => '张三', 'age' => 20, 'class' => '一班'], // 2 => ['id' => 2, 'name' => '李四', 'age' => 21, 'class' => '二班'], // 3 => ['id' => 3, 'name' => '王五', 'age' => 20, 'class' => '一班'] // ] print_r($record_map); ?>
批量处理每条记录:array_map
如果需要对每条记录执行相同的处理逻辑,比如给每个用户的年龄加1,使用array_map函数可以简化代码。
<?php
$new_records = array_map(function($item) {
$item['age'] = $item['age'] + 1;
return $item;
}, $records);
// 输出处理后年龄加1的记录数组
print_r($new_records);
?>
按指定规则分组转换
实际业务中经常需要按某个字段对记录数组进行分组,比如按班级分组用户,这种场景可以结合遍历和内置函数实现。
按班级分组用户:
<?php
$group_by_class = [];
foreach ($records as $item) {
$class = $item['class'];
if (!isset($group_by_class[$class])) {
$group_by_class[$class] = [];
}
$group_by_class[$class][] = $item;
}
// 输出分组结果
print_r($group_by_class);
?>
也可以使用array_reduce函数实现分组逻辑,代码更简洁:
<?php
$group_by_class = array_reduce($records, function($carry, $item) {
$class = $item['class'];
$carry[$class][] = $item;
return $carry;
}, []);
print_r($group_by_class);
?>
处理注意事项
- 处理前先判断记录数组是否为空,避免遍历空数组或调用函数时报错,可以使用
empty函数判断。 - 如果记录数组是从数据库直接获取,注意字段名的大小写是否和代码中一致,避免取不到值的问题。
- 对于数据量特别大的记录数组,尽量避免多次循环处理,优先合并处理逻辑,减少性能损耗。
- 转换后的数组如果需要用于后续业务逻辑,建议明确数组的结构,避免后续使用时出现未定义索引的错误。
处理数据库查询的多条记录数组时,优先选择内置函数完成简单转换,复杂逻辑再使用循环处理,既能保证代码简洁,也能提升执行效率。