Maison >développement back-end >tutoriel php >如何判断两组字符串是否有相同的字符?

如何判断两组字符串是否有相同的字符?

WBOY
WBOYoriginal
2016-06-23 13:56:211653parcourir

$a=2344;//主字符串,固定值。

//下面为可变化的变量
如果$b=12;//判断$a字符串中是否包含1和2,判断后结果为假
如果$b=22;//判断$a字符串中是否包含两个2,判断后结果只有一个2,假
如果$b=234;//判断$a字符串中是否包含2,3,4.判断后结果$a中全部包含,真
如果$b=324;//判断$a字符串中是否包含3,2,4.判断后结果$a中全部包含,真
如果$b=4432;//判断$a字符串中是否包含4,4,3,2.判断后结果$a中全部包含,真
如果$b=4444;//判断$a字符串中是否包含4个4,.判断后结果$a只有二个4,假
如果$b
如果$b
如果$b
......后面还会有许多

我需要的判断结果为如上。
判断语句怎么写?


回复讨论(解决方案)

$a = '2344';$d = array('12', '22', '234', '324', '4432', '4444');$a = count_chars($a, 1);foreach($d as $b) {  $t = count_chars($b, 1);  $f = 0;  if(array_keys(array_intersect_key($t, $a)) == array_keys($a)) $f = 1;  printf("b = %s %s\n", $b, $f ? '真' : '假');}
b = 12 假b = 22 假b = 234 真b = 324 真b = 4432 真b = 4444 假

如果$b=4444;//判断$a字符串中是否包含4个4,.判断后结果$a只有二个4,假
这条规则似乎不妥

把$a和$b按字符分别拆成数组,然后判断是否子集?

不知道你这样做的目的是什么?
要从业务逻辑入手,可能有更好的解决方案。

$a = '2344';$d = array('12', '22', '234', '324', '4432', '4444');$a = count_chars($a, 1);foreach($d as $b) {  $t = count_chars($b, 1);  $f = 0;  if(array_keys(array_intersect_key($t, $a)) == array_keys($a)) $f = 1;  printf("b = %s %s\n", $b, $f ? '真' : '假');}
b = 12 假b = 22 假b = 234 真b = 324 真b = 4432 真b = 4444 假

如果$b=4444;//判断$a字符串中是否包含4个4,.判断后结果$a只有二个4,假
这条规则似乎不妥



这样的判断还是有缺陷啊,
如果$a为4444呢。
我想要的结果是,只有$b=4444;或者$b=44,或者$b=444或者$b=4的时候,才能匹配成功,才能为真,其他都不符合,

我已经说了,你的规则有问题(或者说不完备)
我给的代码只能处理一种情况:$a 中的所有字符(去除重复的)都必须出现在 $b 中

等你制定好完备的规则后,再去扩展功能

先把字符串转换成数组,然后用array_count_values计算各字符出现的字数,如果$b中出现的次数小于等于$a中出现的字数就是真,否则就是假。

我已经说了,你的规则有问题(或者说不完备)
我给的代码只能处理一种情况:$a 中的所有字符(去除重复的)都必须出现在 $b 中

等你制定好完备的规则后,再去扩展功能



直接说我的业务需求吧,或许能明白一点,
这样子的。
七星彩你应该知道吧,
我们公司需要做一个这样的一个游戏活动。

如果这期开奖号码是5667 321
这里我们只截取前面四位数,也就是5667来作为是否中奖,后面三位省略掉。
而中奖规则为四等奖项。
一等奖为四个数同现,意思是,四个数字同时出现
二等奖为三个数同现,
三等奖为二个数同现,
四等奖为一个数同现。
那么, 开奖之前,会有许多人来投注。

如果a单投了一个5,则开奖号码中有一个5,则中奖了。但他中的是四等奖。
如果B投了567,则开奖号码中同时出现567,中了个2等奖。
如果C投了66,则开奖号码中,有两个6同时出现,也中了。(可能会问,为什么这样投呢,因为如果投重复码并中奖的话,奖励会翻倍。)
如果D投了5676,则开奖号码中全部匹配,中了一等奖。

大概是这样的一个规则。意思是,不过你投了1个数字或者4个数字,开奖号码中,必须全部匹配才能中奖。包括重复数

$a='5415';$a=str_split($a);$a=array_count_values($a);$b='514';$b=str_split($b);$b=array_count_values($b);$result=true;foreach($b as $k=>$v){    if(!isset($a[$k]) OR $a[$k]<$v){        $result=false;        break;    }}var_dump($result);

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:对数组进行分组Article suivant:将16进制转换成10进制整数