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

使用Foreach为循环数据分配数组键:保留variant_id作为键的解决方案

问题

我希望通过新数组整理数据,在分配数组时将variant_id作为数组键。但当前操作后,数组键从0开始,未保留variant_id,请问解决方案是什么?

相关PHP代码

$variantList = $this->variants;
$variantOne = [];
$variantTwo = [];
$variantThree = [];
foreach ($variantList as $value){
    if ($value->variant->type === 1){
        $variantOne[$value->variant_id] = $value->variant_option;
    }
    if ($value->variant->type === 2){
        $variantTwo[$value->variant_id] = $value->variant_option;
    }
    if ($value->variant->type === 3){
        $variantThree[$value->variant_id] = $value->variant_option;
    }
}

当前输出

{
  "variantOne": [
    "BMW",
    "213"
  ],
  "variantTwo": [
    "Yeni",
    "erwe"
  ],
  "variantThree": [
    "2024"
  ]
}

需求

输出的数组需以variant_id作为键名,而非默认的数字索引。

解决方案

你的代码赋值逻辑本身没问题,问题出在后续转JSON的环节:当PHP关联数组的键是连续数字时,json_encode默认会把它转成JSON数组(数字索引),而非保留自定义键名的JSON对象。

方法1:转JSON时强制转为对象

在生成JSON输出时,添加JSON_FORCE_OBJECT参数,强制让所有数组转为JSON对象,保留variant_id键名:

// 组合三个数组并转JSON
$result = [
    'variantOne' => $variantOne,
    'variantTwo' => $variantTwo,
    'variantThree' => $variantThree
];
echo json_encode($result, JSON_FORCE_OBJECT);

输出示例(假设variant_id分别为101、102等):

{
  "variantOne": {
    "101": "BMW",
    "102": "213"
  },
  "variantTwo": {
    "201": "Yeni",
    "202": "erwe"
  },
  "variantThree": {
    "301": "2024"
  }
}

方法2:给键名添加前缀(避免连续数字键)

如果不想强制转对象,可以给variant_id加前缀,让键名变成非纯数字格式,json_encode会自动保留键名:

foreach ($variantList as $value){
    if ($value->variant->type === 1){
        $variantOne['vid_' . $value->variant_id] = $value->variant_option;
    }
    if ($value->variant->type === 2){
        $variantTwo['vid_' . $value->variant_id] = $value->variant_option;
    }
    if ($value->variant->type === 3){
        $variantThree['vid_' . $value->variant_id] = $value->variant_option;
    }
}

输出示例:

{
  "variantOne": {
    "vid_101": "BMW",
    "vid_102": "213"
  },
  "variantTwo": {
    "vid_201": "Yeni",
    "vid_202": "erwe"
  },
  "variantThree": {
    "vid_301": "2024"
  }
}

内容的提问来源于stack exchange,提问作者İsmail Berkay Kara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:00:20