如何从包含父子分隔符的字符串生成无重复父键的数组?
解决方案:将字符串转换为无重复父项的数组
嘿,我刚好能解决这个问题!这里有个PHP实现的方案,完全符合你要的数组结构,还能确保父项不会重复:
$inputString = "Progressivism and World War 1>Gender and Equality|Progressivism and World War 1>Social Change and Reform|The Great Depression and the New Deal"; $result = []; $existingParents = []; // 按父分隔符 | 拆分所有条目 $entries = explode('|', $inputString); foreach ($entries as $entry) { // 按子分隔符 > 拆分当前条目 $parts = explode('>', $entry); if (count($parts) === 2) { $parentName = trim($parts[0]); $childName = trim($parts[1]); // 检查父项是否已存在,不存在则添加 if (!in_array($parentName, $existingParents)) { $result[] = [ 'name' => $parentName, 'parent' => false ]; $existingParents[] = $parentName; } // 添加子项 $result[] = [ 'name' => $childName, 'parent' => $parentName ]; } else { // 无父项的条目直接作为顶级项添加 $result[] = [ 'name' => trim($parts[0]), 'parent' => false ]; } } // 输出结果 print_r($result);
代码逻辑说明
- 拆分字符串:先用
explode('|', $inputString)把整个输入拆成独立的条目,每个条目要么是「父>子」结构,要么是单独的顶级项。 - 父项去重:用
$existingParents数组记录已经添加过的父项,每次处理父-子结构时,先检查父项是否已存在,避免重复插入。 - 构建数组:
- 如果条目是「父>子」结构,先添加父项(如果未存在),再添加子项并指定对应的父项名称。
- 如果是单独的项,直接作为
parent: false的顶级项添加。
运行这段代码后,得到的结果完全符合你的期望:
Array ( [0] => Array ( [name] => Progressivism and World War 1 [parent] => ) [1] => Array ( [name] => Gender and Equality [parent] => Progressivism and World War 1 ) [2] => Array ( [name] => Social Change and Reform [parent] => Progressivism and World War 1 ) [3] => Array ( [name] => The Great Depression and the New Deal [parent] => ) )
内容的提问来源于stack exchange,提问作者Kyle Knight
相关产品推荐
相关产品推荐

