← PHP中的array_column():从二维数组里抽一列出来 PHP中的compact():把变量打包成数组 →

PHP中的array_combine():两个数组合并成一个

原创 2026-05-22 PHP 已有人查阅

手头有两个数组,一个存键名,一个存值,想拼成一个键值对数组。自己写循环当然能实现,但PHP早就准备好了array_combine(),一行代码搞定。

注意: 两个数组的元素数量必须一致,否则报错。这个坑不少新手踩过。

语法格式

array_combine(array $keys, array $values): array

参数说明:

参数 说明 必填?
keys 作为键名的数组 必填
values 作为值的数组 必填

返回值: 合并后的关联数组。如果两个数组长度不同,返回false并触发E_WARNING错误。

核心规则

  • 第一个数组的每个元素变成新数组的键名

  • 第二个数组的每个元素变成新数组的

  • 两个数组元素数量必须相等

示例1:基础用法

<?php
$keys = ["id", "name", "score", "grade"];
$values = [1001, "张伟", 87.5, "B"];
$student = array_combine($keys, $values);
print_r($student);
?>

输出:

Array
(
    [id] => 1001
    [name] => 张伟
    [score] => 87.5
    [grade] => B
)

省去了手动定义数组的麻烦,直接从两个列表构建出结构化的数据。

示例2:数量不一致会报错

<?php
$names = ["键盘", "鼠标", "显示器", "U盘"];  // 4个
$prices = [299, 89];  // 2个
$result = array_combine($names, $prices);
print_r($result);
?>

输出:

Warning: array_combine(): Both parameters should have an equal number of elements
false

函数不会帮你补齐或者截断,数量对不上直接报错。所以用之前先用count()检查一下比较稳妥。

示例3:代码号学习编程场景

<?php
$student_ids = ["code001", "code002", "code003", "code004"];
$final_scores = [85, 92, 78, 88];
$score_board = array_combine($student_ids, $final_scores);
print_r($score_board);
?>

输出:

Array
(
    [code001] => 85
    [code002] => 92
    [code003] => 78
    [code004] => 88
)

用学号作为键名,成绩作为值,很方便地构建了一个成绩表。

示例4:键名重复的情况

<?php
$keys = ["a", "b", "a", "c"];
$values = ["苹果", "香蕉", "橙子", "葡萄"];
$fruits = array_combine($keys, $values);
print_r($fruits);
?>

输出:

Array
(
    [a] => 橙子
    [b] => 香蕉
    [c] => 葡萄
)

注意:键名"a"出现了两次,后面的"橙子"覆盖了前面的"苹果"。如果你不希望数据丢失,先确保键名数组是唯一的(比如用array_unique()去重)。

示例5:从查询结果中提取数据

<?php
// 从数据库查到的两列数据
$product_names = ["机械键盘", "游戏鼠标", "曲面显示器", "降噪耳机"];
$intory_counts = [45, 128, 12, 73];

$intory = array_combine($product_names, $intory_counts);
arsort($intory);  // 按库存量排序
print_r($intory);
?>

输出:

Array
(
    [游戏鼠标] => 128
    [降噪耳机] => 73
    [机械键盘] => 45
    [曲面显示器] => 12
)

结合arsort()、asort()这些排序函数,可以做更灵活的数据展示。

个人经验分享

  1. 什么时候用这个函数?

    • 从CSV文件读两行数据(一行表头一行数据)要组装成关联数组

    • API返回的数据是分开的两个数组(一个存字段名,一个存字段值)

    • 把两个列表快速转成键值对映射

  2. 为什么不用循环手动组装?

    • 代码更简短,可读性更高

    • 内置函数底层用C实现,处理大数组时性能更好

  3. 常见的坑:

    • 忘了检查两个数组长度是否一致。建议加个判断:if(count($keys) === count($values))再执行

    • 键名数组里有重复值,后面的会覆盖前面的,数据无声无息丢失

    • 键名数组不能包含对象或数组,只能是string或int类型

  4. 配合list()或explode()使用:

    $keys = explode(",", "name,age,city");
    $values = ["李芳", 26, "上海"];
    $person = array_combine($keys, $values);

示例6:错误处理的正规写法

<?php
function safe_array_combine($keys, $values) {
    if (count($keys) !== count($values)) {
        // 记录日志或返回空数组,而不是让程序崩溃
        error_log("array_combine: 两个数组长度不一致");
        return [];
    }
    return array_combine($keys, $values);
}

$headers = ["id", "title", "price"];
$row = [101, "PHP教程"];
$result = safe_array_combine($headers, $row);
print_r($result);
?>

项目开发中建议封装一个带长度检查的包装函数,避免线上报错。

本节课程知识要点

  • array_combine()用第一个数组的值作为键名,第二个数组的值作为值

  • 两个数组的元素个数必须相等,否则返回false

  • 键名数组中的重复值会导致数据覆盖(后面覆盖前面)

  • 键名只能使用string或int类型

  • 函数从PHP 5.0开始可用

  • 配合array_slice()array_unique()做数据处理效果不错

← PHP中的array_column():从二维数组里抽一列出来 PHP中的compact():把变量打包成数组 →
分享笔记 (共有 篇笔记)
验证码:
微信公众号