花半天时间想的标签规范,请教一个字符串转换问题……

C 2021-8-13 1342

我那个新网站框架还在做,最近考虑的是做一套标签格式规范。

要实现的功能主要有:无限层级嵌套(多级标签)以及允许子标签继承多个父标签。

为了使存储的数据最小化,我将标签格式规范制定如下:

1.2{44,55.66{888,999{0000}},77},3{66{666}}

标签层级关系:

-1.2(1.2意思是1和2拥有共同的子标签)
--44
--55.66
---888
---999
----0000
--77
-3
--66
---666

这里说一下我的系统中“标签”的概念是一个语义的集合,例如搜索“黑丝”“白丝”都能定位到“丝袜”及其所代表的标签ID。而多层级中的标签,并不像WordPress那样,子ID必须指定它是某个标签的子集,如果这样的话会导致需要重复定义。

我的系统实现方法是在某个父级出现二级分类时自动生成一个“父”+“子”的联合标签ID,在一个特殊的关联表中进行查询。同样道理,三级分类时又“父+子”这个标签ID再联合“孙”标签生成新的标签ID,查询N级标签时进行递归即可。

举个例子“图库”中的子分类“丝袜”和“美女”中的子分类“丝袜”都包含“丝袜”这个语义,我希望“图库-丝袜”和“美女-丝袜”展示不同的内容。如果按传统模式这是无法实现的,我系统中“图库-丝袜”和“美女-丝袜”则分别代表不同的ID。

现在主要问题是,由于标签字段采用最小化进行存储,在系统进行查询前需要将这个字符串展开。我希望将其还原成比较通用的json数组,这里就成了一个比较头疼的问题。

原始数据:

1.2{44,55.66{888,999{0000}},77},3{66{666}}

JSON:

{"1.2":{"44":"","55.66":{"888":"","999":{"0000":""}},"77":""},"3":{"66":{"666":""}}}

PHP:

array(
	"1.2"=>array(
		"44"=>"",
		"55.66"=>array(
			"888"=>"",
			"999"=>array(
				"0000"=>""
			),
		),
		"77"=>"",
	),
	"3"=>array(
		"66"=>array("666"=>""),
	),
);

各位有没有什么从原始数据到JSON的转换思路?用PHP或JS实现都可以。

最新回复 (4)
  • v2016 2021-8-13
    2
  • C 2021-8-13
    3
    v2016 循环判断括号?

    不行的,没法区分层级范围。

  • C 2021-8-13
    4
    v2016 循环判断括号?

    其实有个办法,像PHP的话这样写:

    $str='1.2{44,55.66{888,999{111,333}},77},3{66{666}}';
    print_r(json_decode('{"'.str_replace(array('{',',','}','}":""'),array('":{"','":"","','":""}','}'),$str.'}'),true));

    但总感觉哪里有问题……

  • zeg922 2021-8-14
    5
    C 其实有个办法,像PHP的话这样写: $str='1.2{44,55.66{888,999{111,333}},77},3{66{666}}'; print_r(json_decode('{&quo ...

    你就是最大的问题

返回
发新帖