Heim > Backend-Entwicklung > PHP-Tutorial > 字符串不重复拼接法?

字符串不重复拼接法?

WBOY
Freigeben: 2016-07-06 13:53:29
Original
1354 Leute haben es durchsucht

比如有以下数据表结构
id lei shuxing miaoshu
1 大象 眼睛 大大的
2 大象 眼睛 圆圆的
3 大象 鼻子 高高的
4 熊 鼻子 小小的
5 大象 腿 长长的
6 熊 腿 细细的
7 大象 嘴 小小的

第二列和第三列和第四列都可能有n多种情况,求一个能实现出以下要求组合的php方法,要求是每个描述是一个lei,涵盖shuxing中的3项(不够三项有几个算几个比如熊),以生成对某个动物的不同描述

举例说明:按以上数据的结果应该是

大象 眼睛大大的,鼻子高高的,腿长长的
大象 眼睛圆圆的,鼻子高高的,腿长长的
大象 眼睛大大的,鼻子高高的,嘴小小的
。。。
由于能组合出不少,就没法一一列出了,通过以上的例子希望朋友们能理解

回复内容:

比如有以下数据表结构
id lei shuxing miaoshu
1 大象 眼睛 大大的
2 大象 眼睛 圆圆的
3 大象 鼻子 高高的
4 熊 鼻子 小小的
5 大象 腿 长长的
6 熊 腿 细细的
7 大象 嘴 小小的

第二列和第三列和第四列都可能有n多种情况,求一个能实现出以下要求组合的php方法,要求是每个描述是一个lei,涵盖shuxing中的3项(不够三项有几个算几个比如熊),以生成对某个动物的不同描述

举例说明:按以上数据的结果应该是

大象 眼睛大大的,鼻子高高的,腿长长的
大象 眼睛圆圆的,鼻子高高的,腿长长的
大象 眼睛大大的,鼻子高高的,嘴小小的
。。。
由于能组合出不少,就没法一一列出了,通过以上的例子希望朋友们能理解

建造者模式http://www.runoob.com/design-pattern/builder-pattern.html

<code>select lei,group_concat(concat(shuxing,miaoshu)) result from tb group by lei</code>
Nach dem Login kopieren

这样可以返回
lei result
大象 眼睛大大的,鼻子高高的,腿长长的, 嘴小小的
熊 鼻子小小的,腿细细的
...
返回到后台通过逗号分割result,然后随机拼接三条结果
---以上个人见解,欢迎点评---

其实还是没太看懂题主到底是问php问题还是sql问题。
不过感觉sql并不擅长解决这类问题,那我就假设是编程问题吧。

由于不懂php,所以仅提供解题思路:
1、根据lei查询所有符合条件的数据,例如:

<code class="SQL">SELECT lei, shuxing, miaoshu FROM animal
WHERE lei IN ('大象', '熊');</code>
Nach dem Login kopieren

2、在代码里先后对lei属性和shuxing属性做group by操作,如下:

<code class="JSON">{
    "大象": {
        "眼睛": ["大大的", "圆圆的"],
        "鼻子": ["高高的"],
        "腿": ["长长的"],
        "嘴": ["小小的"]
    },
    "熊": {
        ...
    }
}</code>
Nach dem Login kopieren

3、对2中的数据进行笛卡尔积运算,done.

PS:其实是表结构设计得不好,应该拆分成animal表(animal_id, animal_name)和animal_prop表(animal_prop_id, animal_id, prop_name, prop_desc)。

可以采用分表,分成三张表。table1:用来记录lei的信息 table2:用来记录shuxing,table1的ID table3:

用来记录miaoshu,table2的ID,用着三张表进行关联查询

各位朋友,有能帮忙解决一下的没?

对啊 上楼说的是个思路
分表
然后根据表进行关联查询
把类单独拿出来建一张表
类的属性再建一张表(1对多关系)

python 版本:

<code>from collection import defaultdict

anims = defaultdict(lambda : defaultdict(lambda : defaultdict(set)))

for lei, shuxing, miaoshu in db.select('table', ['lei', 'shuxing', 'miaoshu']):
    anims[lei][shuxing].add(miaoshu)
    
# enum all descs
for lei, v1 in anims.items():
    print 'desc lei: ', lei
    shuxings = [(k, list(v)) for k,v in v1.items()]
    shuxing_size = len(shuxings)
    if shuxing_size == 0:
        pass
    elif shuxing_size == 1:
        for i in range(shuxing_size):
            for ii in range(shuxings[i][1]):
                print shuxings[i][0], shuxings[i][1][ii]
    elif shuxing_size == 2:            
        for i in range(shuxing_size):
            for j in range(i+1, shuxing_size):
                for ii in range(shuxings[i][1]):
                    for jj in range(shuxings[j][1]):
                        print shuxings[i][0], shuxings[i][1][ii], shuxings[j][0], shuxings[j][1][jj]
    else:
        for i in range(shuxing_size):
            for j in range(i+1, shuxing_size):
                for k in range(j+1, shuxing_size):
                    for ii in range(shuxings[i][1]):
                        for jj in range(shuxings[j][1]):
                            for kk in range(shuxings[k][1]):
                                print shuxings[i][0], shuxings[i][1][ii], shuxings[j][0], shuxings[j][1][jj], shuxings[k][0], shuxings[k][1][kk]</code>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage