ホームページ  >  記事  >  バックエンド開発  >  2 つの文字列セットに同じ文字が含まれているかどうかを確認するにはどうすればよいでしょうか?

2 つの文字列セットに同じ文字が含まれているかどうかを確認するにはどうすればよいでしょうか?

WBOY
WBOYオリジナル
2016-06-23 13:56:211618ブラウズ

$a=2344;//メイン文字列、固定値。

//以下は可変変数です
If $b=12;//$a 文字列に 1 と 2 が含まれているかを判定し、判定後の結果は false になります
If $b=22;//$a 文字列が文字列かどうかを判定します2が2つ含まれる場合、判定結果は2のみ、false
If $b=234;//文字列$aに2、3、4が含まれるか判定。判定後の結果$aには全てが含まれる、$b=234の場合はtrue
b=324;//$a 文字列に 3、2、4 が含まれるかどうかを判定します。判定後の結果 $a にはすべてが含まれ、true
If $b=4432;//$a 文字列に 4 が含まれるかどうかを判定し、 4, 3, 2. 判定後の結果 $a には 4 がすべて含まれ、true
If $b=4444;//$a の文字列に 4 が 4 つ含まれるか判定します。判定後の結果 $a には 4 が 2 つだけ含まれます。 , false
If $b
If $b
If $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 假

If $b=4444; // 判定後の結果 $a には 4 が 2 つしかなく、false になります。
このルールは不適切だと思われます


$a と $b を文字ごとに配列に分割し、それらがサブセットであるかどうかを判断しますか?

あなたの目的が何なのかわかりませんか?

ビジネスロジックから始めてください。もっと良い解決策があるかもしれません。 ... 判断にはまだ欠陥があります、
$a が 4444 だったらどうなるでしょうか。

私が望む結果は、$b=4444; または $b=44 または $b=444 または $b=4 の場合にのみ、一致が成功し真となり、その他は一貫性がないということです。ルールに何か問題がある (または不完全である) ことは既に述べました

私が指定したコードは 1 つの状況のみを処理できます: $a のすべての文字 (重複を削除) は $b に出現する必要があります


完全なルールを策定した後、あなたを待っています, 関数を展開します

まず文字列を配列に変換し、$b の出現数が単語数以下である場合に、array_count_values を使用して各文字に出現する単語の数を計算します。 $a の場合は true、それ以外の場合は単なる偽物です。


ルールに何か問題がある (または不完全) と既に述べました
私が指定したコードは 1 つの状況のみを処理できます: $a のすべての文字 (重複を削除) は $b に出現する必要があります

定式化した後完全なルールを作成したら、機能を拡張できます


私のビジネス ニーズを直接教えてください。少しは理解できるかもしれません。
こんな感じです。
あなたは蔡七星について知っておくべきです、

私たちの会社はそのようなゲーム活動をする必要があります。

今回の宝くじ番号が 5667 321 の場合

ここでは、最初の 4 桁の 5667 だけを切り取って当選を判定し、最後の 3 桁を省略します。

当選ルールは4等賞の場合となります。
1 等は 4 つの数字が同時に表示されます。 2 等は 3 つの数字が同時に表示されます。 3 等は 2 つの数字が同時に表示されます。 4 等は 1 つの数字です。 。
そして、宝くじが引かれる前に、多くの人が賭けをします。

シングルが 5 に賭けた場合、宝くじ番号に 5 があり、勝ちとなります。しかし、彼は4位入賞を果たした。
B が 567 をキャストした場合、宝くじの番号にも 567 が表示され、B は 2 番目の賞を獲得します。
C が 66 をキャストした場合、宝くじの数字に 6 が同時に 2 つ現れた場合も勝ちです。 (なぜこのようにキャストするのか疑問に思うかもしれません。重複したコードをキャストして勝てば報酬が 2 倍になるからです。)
D が 5676 をキャストすると、すべての宝くじ番号が一致し、1 等を獲得します。

これはおそらくそのようなルールです。これは、1 つの数字または 4 つの数字をキャストする場合、当選するにはすべての宝くじの数字が一致する必要があることを意味します。繰り返しが含まれます


$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 ? '真' : '假');}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。