$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,假
这条规则似乎不妥

解决方案 »

  1.   


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

  2.   

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

  3.   


    直接说我的业务需求吧,或许能明白一点,
    这样子的。
    七星彩你应该知道吧,
    我们公司需要做一个这样的一个游戏活动。如果这期开奖号码是5667 321
    这里我们只截取前面四位数,也就是5667来作为是否中奖,后面三位省略掉。
    而中奖规则为四等奖项。
    一等奖为四个数同现,意思是,四个数字同时出现
    二等奖为三个数同现,
    三等奖为二个数同现,
    四等奖为一个数同现。
    那么, 开奖之前,会有许多人来投注。如果a单投了一个5,则开奖号码中有一个5,则中奖了。但他中的是四等奖。
    如果B投了567,则开奖号码中同时出现567,中了个2等奖。
    如果C投了66,则开奖号码中,有两个6同时出现,也中了。(可能会问,为什么这样投呢,因为如果投重复码并中奖的话,奖励会翻倍。)
    如果D投了5676,则开奖号码中全部匹配,中了一等奖。大概是这样的一个规则。意思是,不过你投了1个数字或者4个数字,开奖号码中,必须全部匹配才能中奖。包括重复数
      

  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);