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

PHP中如何将class_3_main的mainSupplierIds映射到class_3_suppliers的supplierIds

对应赋值数组中同位置字段的问题解决

你遇到的问题是想把class_3_main数组里每个元素的mainSupplierIds值,对应赋值给class_3_suppliers数组里同位置元素的supplierIds字段,但之前的代码导致每个supplierIds都变成了包含所有值的数组——这是因为你错误地把提取后的整个数组直接赋值给了class_3_suppliers的supplierIds键,而不是逐个元素对应赋值。

错误原因分析

你之前的代码逻辑问题在于:

$result = array_map(create_function('$arr', 'return $arr["mainSupplierIds"];'), $class_3_main);
$class_3_suppliers['supplierIds'] = $result;
  • array_map确实会把class_3_main中所有mainSupplierIds提取成一个数组,比如["23, 24, 32, 21, 39, 84, 23", "47, 11"]
  • 但你直接把这个数组赋值给$class_3_suppliers['supplierIds'],相当于给整个class_3_suppliers数组新增了一个supplierIds键,而不是给数组里的每个子元素设置supplierIds,自然不符合预期。

正确实现方式

因为class_3_main和class_3_suppliers是按顺序一一对应的,我们可以通过索引遍历两个数组,逐个完成赋值:

方法1:普通foreach循环

// 先从原数组中取出需要操作的两个子数组
$class_3_main = $list[0]['class_3_main'];
$class_3_suppliers = $list[0]['class_3_suppliers'];

// 遍历每个索引,对应赋值(加判断避免索引越界)
foreach ($class_3_main as $index => $mainItem) {
    if (isset($class_3_suppliers[$index])) {
        $class_3_suppliers[$index]['supplierIds'] = $mainItem['mainSupplierIds'];
    }
}

// 将更新后的suppliers数组放回原数组
$list[0]['class_3_suppliers'] = $class_3_suppliers;

方法2:函数式风格(array_walk)

如果你更喜欢函数式写法,可以用array_walk遍历class_3_suppliers,同时引入class_3_main获取对应值:

$class_3_main = $list[0]['class_3_main'];
$class_3_suppliers = $list[0]['class_3_suppliers'];

array_walk($class_3_suppliers, function(&$supplierItem, $index) use ($class_3_main) {
    if (isset($class_3_main[$index])) {
        $supplierItem['supplierIds'] = $class_3_main[$index]['mainSupplierIds'];
    }
});

$list[0]['class_3_suppliers'] = $class_3_suppliers;

执行以上代码后,class_3_suppliers数组就会变成你预期的结果:

"class_3_suppliers":[
    {
        "originalId":6927,
        "name":"USA Suppliers",
        "supplierIds":"23, 24, 32, 21, 39, 84, 23"
    },
    {
        "tag_id":6928,
        "name":"UK Suppliers",
        "supplierIds":"47, 11"
    }
]

小提示:create_function在PHP 7.2及以上版本已被废弃,建议用匿名函数替代,比如你原来的array_map可以改成:

$result = array_map(function($arr) {
    return $arr["mainSupplierIds"];
}, $class_3_main);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:23:17