PHP中将多单键JSON对象数组转换为单对象数组的实现方法
解决PHP中JSON数组格式转换的问题
嘿,我来帮你搞定这个格式转换!你现在的输出是一堆单键对象组成的数组,想要把它转换成以日期为键、对应带链接的HTML内容为值的单一JSON对象对吧?而且看起来同一个日期下有重复的标题,还得处理下重复的问题对吧?
下面是具体的PHP实现步骤和代码:
思路解析
- 遍历原始数组,把每个条目中的日期和标题提取出来
- 对同一个日期下的标题进行去重(避免重复内容)
- 将每个标题转换成指定的
<a>标签格式 - 把同一个日期下的所有链接合并(用你想要的分隔符,比如
<br>) - 最后把整理好的数组转换成JSON字符串
代码实现
// 你的原始结果数组 $originalArray = [ ["05-10-2018" => "Seeing dads differently"], ["05-10-2018" => "Extraordinary ordinary Britain"], ["05-10-2018" => "Roll up for the Social Science Market!"], ["05-10-2018" => "Why do we use it?"], ["05-10-2018" => "Extraordinary ordinary Britain"] ]; $finalArray = []; foreach ($originalArray as $item) { // 提取当前条目的日期和标题(每个item只有一组键值对) $date = key($item); $title = trim(current($item)); // 顺便去掉标题里的多余空格,比如第三个标题的开头空格 // 跳过重复的标题,避免生成重复链接 if (isset($finalArray[$date]) && strpos($finalArray[$date], $title) !== false) { continue; } // 生成带链接的HTML,这里的href可以替换成你实际的文章URL // 比如如果有一个$urlMap数组存储标题对应URL,就改成$urlMap[$title] $linkHtml = "<a href=\"/articles/{$title}\" target=\"_blank\">{$title}</a>"; // 如果该日期已经有内容,就追加新的链接(用<br>分隔,你可以换成其他分隔符) if (isset($finalArray[$date])) { $finalArray[$date] .= "<br>" . $linkHtml; } else { $finalArray[$date] = $linkHtml; } } // 转换为JSON,保留原始的HTML格式(不转义斜杠和特殊字符) $finalJson = json_encode($finalArray, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); // 输出结果 echo $finalJson;
代码说明
key($item)和current($item):用来提取每个单键对象的日期(键)和标题(值),因为你的原始数组每个元素都是只有一个键值对的对象- 去重逻辑:用
strpos检查当前标题是否已经在该日期的内容里,避免重复生成链接 trim($title):处理标题里的多余空格(比如你原始数组里第三个标题开头有空格)json_encode的参数:JSON_UNESCAPED_SLASHES避免转义/,JSON_UNESCAPED_UNICODE避免转义中文(如果标题有中文的话)
运行这段代码后,你会得到类似这样的JSON结果:
{ "05-10-2018": "<a href=\"/articles/Seeing dads differently\" target=\"_blank\">Seeing dads differently</a><br><a href=\"/articles/Extraordinary ordinary Britain\" target=\"_blank\">Extraordinary ordinary Britain</a><br><a href=\"/articles/Roll up for the Social Science Market!\" target=\"_blank\">Roll up for the Social Science Market!</a><br><a href=\"/articles/Why do we use it?\" target=\"_blank\">Why do we use it?</a>" }
内容的提问来源于stack exchange,提问作者PRIYANKA MORE
相关产品推荐
相关产品推荐

