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

如何在PHP中转置含2层和3层结构的多维关联数组

PHP实现混合层级数组按索引分组重构

需要将包含二维和三维结构的数组按索引分组,把同一索引的所有字段值组合成独立的变体对象,保持字段间的关联关系。

基础实现方案(适配示例结构)

直接针对示例中的固定字段结构编写代码,逻辑清晰易懂:

$variation = [
    "sku" =>  [
        0 => "dSADad",
        1 => "ASDAF",
        2 => "ASFAS",
    ],
    "Price" => [
        0 => "1",
        1 => "1",
        2 => "1",
    ],
    "Quantity" =>  [
        0 => "123",
        1 => "123",
        2 => "123434",
    ],
    "attributes" => [
        "Color" => [
            0 => "5",
            1 => "4",
            2 => "4",
        ],
        "Size" =>  [
            0 => "3",
            1 => "3",
            2 => "2",
        ],
        "Material" =>  [
            0 => "7",
            1 => "7",
            2 => "8",
        ],
    ],
];

// 获取变体总数(假设所有字段的数组长度一致)
$variantCount = count($variation['sku']);
$variations = [];

for ($i = 0; $i < $variantCount; $i++) {
    // 构建当前变体的基础字段
    $variant = [
        'sku' => $variation['sku'][$i],
        'Price' => $variation['Price'][$i],
        'Quantity' => $variation['Quantity'][$i],
        'attributes' => []
    ];
    
    // 填充属性字段
    foreach ($variation['attributes'] as $attrName => $attrValues) {
        $variant['attributes'][$attrName] = $attrValues[$i];
    }
    
    $variations[] = $variant;
}

// 输出结果
print_r($variations);

代码说明

  1. 通过count($variation['sku'])获取变体的总数,前提是所有字段的数组长度保持一致。
  2. 循环每个索引,逐个构建独立的变体对象:
    • 直接提取sku、Price、Quantity对应索引的值。
    • 遍历attributes下的子属性,将对应索引的值填充到当前变体的属性集合中。
  3. 将每个变体对象加入结果数组,最终得到目标结构。

通用实现方案(适配任意混合层级)

如果数组结构可能有变化(比如顶层字段增减),可以使用更通用的代码,自动识别二维/三维字段并处理:

$variantCount = count(reset($variation)); // 自动获取第一个顶层数组的长度
$variations = [];

for ($i = 0; $i < $variantCount; $i++) {
    $variant = [];
    foreach ($variation as $key => $values) {
        if (is_array($values) && isset($values[$i])) {
            // 判断当前字段是二维数组还是三维数组
            if (!is_array(reset($values))) {
                // 二维数组:直接取对应索引的值
                $variant[$key] = $values[$i];
            } else {
                // 三维数组:遍历子属性并取对应索引的值
                $variant[$key] = [];
                foreach ($values as $subKey => $subValues) {
                    $variant[$key][$subKey] = $subValues[$i];
                }
            }
        }
    }
    $variations[] = $variant;
}

print_r($variations);

代码说明

  1. 使用reset($variation)自动获取第一个顶层数组,通过count得到变体总数,无需硬编码字段名。
  2. 遍历顶层所有字段,自动判断字段类型:
    • 若为二维数组(如sku),直接提取对应索引的值。
    • 若为三维数组(如attributes),遍历子属性并提取对应索引的值。
  3. 最终生成的结果数组与目标结构完全一致,同时具备更好的扩展性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:37:34