You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP原生函数实现多维数组转置,替代手动循环方案咨询

转置结构化多维数组:PHP原生函数方案及多语言实现

PHP 原生函数实现

不需要手动循环,PHP 提供的原生函数可以高效完成结构转换,以下是两种简洁方案:

方案一:利用array_column遍历键名

$original = [
    ['id_user' => 79, 'nama' => 'Sasha', 'id_app' => 908989898],
    ['id_user' => 91, 'nama' => 'Edward', 'id_app' => 23232323],
    ['id_user' => 50, 'nama' => 'Jhon', 'id_app' => 1212121212],
];

// 获取所有键名
$keys = array_keys(current($original));
$transposed = [];

foreach ($keys as $key) {
    // 提取每个键对应的所有值
    $transposed[$key] = array_column($original, $key);
}

print_r($transposed);

方案二:array_map+array_combine一键转置

$original = [
    ['id_user' => 79, 'nama' => 'Sasha', 'id_app' => 908989898],
    ['id_user' => 91, 'nama' => 'Edward', 'id_app' => 23232323],
    ['id_user' => 50, 'nama' => 'Jhon', 'id_app' => 1212121212],
];

// 解构原数组,用array_map转置值数组,再用array_combine绑定键名
$transposed = array_combine(
    array_keys($original[0]),
    array_map(null, ...$original)
);

print_r($transposed);

其他主流语言实现

Python

利用字典推导式直接生成目标结构:

original = [
    {'id_user': 79, 'nama': 'Sasha', 'id_app': 908989898},
    {'id_user': 91, 'nama': 'Edward', 'id_app': 23232323},
    {'id_user': 50, 'nama': 'Jhon', 'id_app': 1212121212}
]

# 遍历每个键,收集所有元素对应的值
transposed = {key: [item[key] for item in original] for key in original[0]}
print(transposed)

JavaScript

使用Object.fromEntries结合map实现简洁转换:

const original = [
    {id_user: 79, nama: 'Sasha', id_app: 908989898},
    {id_user: 91, nama: 'Edward', id_app: 23232323},
    {id_user: 50, nama: 'Jhon', id_app: 1212121212}
];

// 提取键名,逐个生成键值对
const transposed = Object.fromEntries(
    Object.keys(original[0]).map(key => [
        key,
        original.map(item => item[key])
    ])
);

console.log(transposed);

Java

通过HashMap和computeIfAbsent方法完成转换:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ArrayTranspose {
    public static void main(String[] args) {
        List<Map<String, Object>> original = new ArrayList<>();
        
        Map<String, Object> item1 = new HashMap<>();
        item1.put("id_user", 79);
        item1.put("nama", "Sasha");
        item1.put("id_app", 908989898L);
        original.add(item1);
        
        Map<String, Object> item2 = new HashMap<>();
        item2.put("id_user", 91);
        item2.put("nama", "Edward");
        item2.put("id_app", 23232323L);
        original.add(item2);
        
        Map<String, Object> item3 = new HashMap<>();
        item3.put("id_user", 50);
        item3.put("nama", "Jhon");
        item3.put("id_app", 1212121212L);
        original.add(item3);
        
        Map<String, List<Object>> transposed = new HashMap<>();
        for (Map<String, Object> item : original) {
            for (Map.Entry<String, Object> entry : item.entrySet()) {
                // 不存在键时自动创建空列表,再添加值
                transposed.computeIfAbsent(entry.getKey(), k -> new ArrayList<>())
                          .add(entry.getValue());
            }
        }
        
        // 打印结果
        transposed.forEach((key, valueList) -> 
            System.out.printf("%s: %s%n", key, valueList)
        );
    }
}

内容的提问来源于stack exchange,提问作者inumaru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 11:58:10