时间:2021-07-01 10:21:17 帮助过:30人阅读
$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 假
把$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 假
我已经说了,你的规则有问题(或者说不完备)
我给的代码只能处理一种情况:$a 中的所有字符(去除重复的)都必须出现在 $b 中
等你制定好完备的规则后,再去扩展功能
先把字符串转换成数组,然后用array_count_values计算各字符出现的字数,如果$b中出现的次数小于等于$a中出现的字数就是真,否则就是假。
我已经说了,你的规则有问题(或者说不完备)
我给的代码只能处理一种情况:$a 中的所有字符(去除重复的)都必须出现在 $b 中
等你制定好完备的规则后,再去扩展功能
$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);