如何在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
相关产品推荐
相关产品推荐

