需要创建带有分隔符的字符串数组的树状结构

时间:2018-10-10 09:16:37

标签: coldfusion

我需要转换一个字符串数组,这是一个用“ /”分隔的列表。

基本上我需要这个:

[
    "label1/label12/label13/label14",
    "label1/label12/label15",
    "label1/label12/label16",
    "label7/label72/label73"
]

要获得这样的效果:

{
    "label1": {
        "label12": {
            "label13": "label14",
            "label15",
            "label16"
        }
    },
    "label7": {
        "label72": "label73"
    }
}

这有可能吗?

编辑:在我写完Drew解决了我的问题之后,我现在需要一种方法来使用“ +++ In work +++”之类的键来完成它

Edit2:第二个solution的效果更好。谢谢你们!

2 个答案:

答案 0 :(得分:3)

long_description

答案 1 :(得分:0)

此方法也可用于带有特殊字符(如“ +”或“!”)的键。或“ +++工作中+++”

<Cfset labels =[
    "label1/label12/label+++13/+++ In work +++",
    "label1/label12/label15",
    "label1/label12$$@!/label16",
    "123/label72/label73"
]>


<cffunction name="convertLabels" returntype="struct">
    <cfargument name="k" type="array">
    <Cfset var local = {}>
    <Cfset local.response = {}>

    <Cfloop from=1 to="#arraylen(arguments.k)#" index="i">
        <Cfset local.splitted = arguments.k[i].Split("/")>
        <cfset local.refPath = local.response>
        <Cfloop from=1 to="#arraylen(local.splitted)#" index="local.y">
            <cfif not structKeyExists(local.refPath,local.splitted[local.y])>
                <Cfset local.refPath[splitted[local.y]] = {}>
            </cfif>
            <Cfset local.refPath = local.refPath[local.splitted[local.y]]>
        </cfloop>
    </cfloop>

    <cfreturn local.response>
</cffunction>
<cfdump var="#convertLabels(labels)#">