可使用array_flip()直接反转键值对,或用foreach、array_reduce()、array_column()配合array_combine()等方法灵活实现键值转换。
如果需要将PHP数组中原本作为值的数据转换为新的键,同时保留原有键或指定新值,可以通过多种内置函数和自定义逻辑实现。以下是几种可行的操作方式:
array_flip() 是最直接的方式,它会交换数组中所有键与其对应值的位置。该函数要求原数组的值必须是合法的键类型(即整数或字符串),且不能有重复值,否则后出现的值会覆盖先出现的同值项。
1、定义一个索引数组或关联数组,例如:$arr = ['a' => 1, 'b' => 2, 'c' => 3];
2、调用 array_flip($arr),得到结果为 [1 => 'a', 2 => 'b', 3 => 'c']。
3、若原数组存在重复值,如 [0 => 'x', 1 => 'x'],执行后仅保留最后一个键值对 ['x' => 1]。
当需要更灵活地控制键的生成逻辑(例如对原值进行格式化、拼接前缀、去重处理等),或原数组值不满足 array_flip 的限制时,可采用遍历方式逐个赋值构造新数组。
1、初始化空数组:$new_arr = [];
2、遍历原始数组:foreach ($original as $key => $value) { ... }
3、将原值设为新键,原键或指定值设为新值,例如:$new_arr[$value] = $key;
4、若需避免键冲突,可在赋值前检查是否存在:if (!isset($new_arr[$value])) { $new_arr[$value] = $key; }
array_reduce() 可以将数组逐步累积为单一结果,在此场景中可用于将每个元素的值作为键、其原始键作为值来折叠生成新数组。
1、传入原始数组与匿名回调函数:array_reduce($arr, function ($carry, $item) use ($arr) { ... }, []);
2、在回调中获取当前值对应的原始键,可借助 array_search() 定位:$orig_key = array_search($item, $arr);
3、将 $item 作为键、$orig_key 作为值加入 $carry:$carry[$item] = $orig_key;
4、返回更新后的 $carry,最终得到键值翻转后的数组。
当原始数组为多维结构(如由关联子数组组成的列表),且希望提取某字段的值作为新键、另一字段作为新值时,array_column() 可配合 array_keys() 或自定义索引逻辑完成映射。
1、准备二维数组:$data = [['id' => 101, 'name' => 'Alice'], ['id' => 102, 'name' => 'Bob']];
2、提取目标字段值作为键:$keys = array_column($data,
'id');
3、提取目标字段值作为值:$values = array_column($data, 'name');
4、使用 array_combine() 合并为新数组:$result = array_combine($keys, $values);
# php
# 回调函数
# 键值对
# red
# if
# 关联数组
# foreach
# 字符串
# 循环
# function
# 重构
# 键值
# 遍历
# 设为
# 自定义
# 回调
# 多维
# 原值
# 在此
# 可以通过
# 可在
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
c++中的可变参数模板(variadic templates)怎么用_c++模板编程黑魔法【C++11】
如何自定义Windows终端的默认配置文件?(PowerShell/CMD)
C#如何在一个XML文件中查找并替换文本内容
LINUX下如何配置VLAN虚拟局域网_在LINUX交换机与服务器上的实现
如何使用Golang实现容器安全扫描_Golang Docker镜像漏洞检测方法
Win11触摸板没反应怎么办_开启Win11笔记本触摸板手势教程【步骤】
Python数据抓取合法性_合规说明【指导】
windows如何测试网速_windows系统网络速度测试方法
php串口通信波特率怎么选_根据硬件手册设置正确波特率【方法】
Linux如何申请SSL免费证书_Linux下Certbot安装与Nginx自动续期【指南】
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
Windows10电脑怎么设置虚拟内存_Win10高级系统设置性能
Win11怎样激活系统密钥_Win11系统密钥激活步骤【攻略】
Win11怎么关闭自动调节亮度_Windows11禁用内容自适应亮度
Win11怎么关闭右下角弹窗_Win11拦截系统通知广告【设置】
如何使用Golang安装API文档生成工具_快速生成接口文档
Flask 表单数据通过 SMTP 发送邮件的完整实现教程
Win11如何隐藏桌面图标 Win11一键隐藏/显示桌面图标【指南】
VSC怎么配置PHP的Xdebug_远程调试设置步骤【详解】
Win11系统占用空间大怎么办 Win11深度瘦身清理指南【优化】
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
Python网络异常模拟_测试说明【指导】
win11 OneDrive怎么彻底关闭 Win11禁用并卸载OneDrive教程【分享】
Win10如何优化内存使用_Win10内存优化技巧【攻略】
如何使用Golang benchmark测量函数延迟_统计执行耗时
windows 10专注助手怎么关闭_windows 10禁用通知提醒功能方法
Win11如何开启系统更新 Win11开启系统更新方法【步骤】
MAC怎么使用表情符号面板_MAC Emoji快捷键调用与符号查找【方法】
Win11怎么更改输入法顺序_Win11调整语言首选位置【设置】
Win11怎么开启上帝模式_创建Windows 11 God Mode全能文件夹【技巧】
如何正确访问 Laravel 模型或对象的属性而非调用不存在的方法
Win11怎么设置虚拟键盘_打开Win11屏幕键盘操作指南【技巧】
Mac如何解压zip和rar文件?(推荐免费工具)
Win11如何设置文件关联 Win11修改特定文件类型的默认打开程序【详解】
Python多线程使用规范_线程安全解析【教程】
php打包exe后无法读取环境变量_变量配置方法【教程】
c++协程和线程的区别 c++异步编程模型对比【核心】
php订单日志怎么导出excel_php导出订单日志到表格教程【教程】
C++如何获取CPU核心数?(std::thread::hardware_concurrency)
PHP怎么接收URL中的锚点参数_获取#后面参数值的技巧【详解】
php485函数怎么捕获异常_php485错误处理机制设置技巧【操作】
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
如何在Golang中实现文件下载_Golang文件传输与内容类型处理方法
c++中如何计算坐标系中两点间距离_c++勾股定理求距离
c++怎么用jemalloc c++替换默认内存分配器【性能】
php本地部署后数据库连接报错_1045accessdenied错误解决方法详解【汇总】
如何在 PHP 中按相同键合并两个关联数组为二维数组
Windows10电脑怎么设置文件权限_Win10安全选项卡所有者修改
VSC怎样在VSC中调试PHPAPI_接口调试技巧【详解】
PHP接收参数长度超限怎么办_修改postmaxsize设置教程【解答】
2025-12-16
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。