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

如何在PHP中根据相同categoryId替换JSON中的name值?

用PHP实现JSON数组的name替换逻辑

没问题,我来帮你把这个逻辑用PHP落地,思路和你写的JavaScript版本一致,但适配PHP的数组操作特性,具体实现如下:

完整代码实现

<?php
// 给定的原始JSON字符串
$json1 = '[{"categoryId":"10","name":"Technology"},{"categoryId":"10","name":"Blog"},{"categoryId":"11","name":"Programming"}]';
$json2 = '[{"categoryId":"10","name":"Tech"}]';

// 1. 将JSON字符串转为PHP可操作的关联数组
$array1 = json_decode($json1, true);
$array2 = json_decode($json2, true);

// 2. 把json2的内容转成「categoryId => name」的映射数组,提升匹配效率
$categoryNameMap = [];
foreach ($array2 as $item) {
    $categoryNameMap[$item['categoryId']] = $item['name'];
}

// 3. 遍历array1,匹配categoryId并替换name
foreach ($array1 as &$item) { // 用引用&直接修改原数组元素
    if (isset($categoryNameMap[$item['categoryId']])) {
        $item['name'] = $categoryNameMap[$item['categoryId']];
    }
}
unset($item); // 解除引用,避免后续代码误修改

// 4. 将修改后的数组转回JSON字符串
$json1 = json_encode($array1);

// 输出结果,和你期望的一致
echo $json1;
// 输出:[{"categoryId":"10","name":"Tech"},{"categoryId":"10","name":"Tech"},{"categoryId":"11","name":"Programming"}]
?>

关键细节说明

  • 引用遍历:PHP里用foreach ($array1 as &$item)是为了直接修改原数组的元素,如果不用引用,修改的只是循环内的临时变量,原数组不会变化。遍历结束后一定要用unset($item)解除引用,防止后续代码不小心污染这个变量。
  • 映射数组优化:把array2转成categoryNameMap是为了提升效率——如果json2里有多个分类数据,每次匹配不用再遍历整个array2,直接通过键名查找,时间复杂度从O(n*m)降到O(n)。
  • 安全检查:用isset($categoryNameMap[$item['categoryId']])确保只有存在匹配的categoryId时才替换,避免出现未定义索引的警告。

这个实现和你JS版本的逻辑完全对齐,只是适配了PHP的语法特性,最终能达到你想要的替换效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:52:49