所以我有一个字符串
$string = "funny cat fighting";
我有一个 2d 同义词数组,例如:
$arr = array (
0 =>
array (
0 => 'cat',
1 => 'tabby',
2 => 'kitty',
3 => 'puss'
),
1 =>
array (
0 => 'funny',
1 => 'haha',
2 => 'lol'
),
2 =>
array (
0 => 'war',
1 => 'fighting'
)
)
我将如何获取$string "funny cat fighting"
的每个可能的同义词变体,例如,我希望输出是一个字符串数组:
funny cat fighting
haha cat fighting
lol cat fighting
funny tabby fighting
。所有变体
假设有几件事:
- 您不会寻找每个单词的每个排列,因此使用匹配的字符串毫无意义。
- 数组的结构略有错误,因为
cat
在第一个数组中,funny
在第二个数组中。
好的,所以通过对数组进行一些调整,它可以很容易地像下面这样完成,我补充说,如果单词不在数组中,那么它保持不变:
<?php
$arr = array (
0 =>
array (
0 => 'funny',
1 => 'haha',
2 => 'lol'
),
1 =>
array (
0 => 'cat',
1 => 'tabby',
2 => 'kitty',
3 => 'puss'
),
2 =>
array (
0 => 'war',
1 => 'fighting'
)
);
$string = "funny cat fighting";
$words = explode(' ', $string, 3);
$result = [];
foreach ($arr[0] as $a) {
if (!in_array($words[0], $arr[0])) {
$a = $words[0];
}
foreach ($arr[1] as $b) {
if (!in_array($words[1], $arr[1])) {
$b = $words[1];
}
foreach ($arr[2] as $c) {
if (!in_array($words[2], $arr[2])) {
$c = $words[2];
}
if (!in_array($a.' '.$b.' '.$c, $result)) {
$result[] = $a.' '.$b.' '.$c;
}
}
}
}
print_r($result);
结果:https://3v4l.org/7rEsh
Array
(
[0] => funny cat war
[1] => funny cat fighting
[2] => funny tabby war
[3] => funny tabby fighting
[4] => funny kitty war
[5] => funny kitty fighting
[6] => funny puss war
[7] => funny puss fighting
[8] => haha cat war
[9] => haha cat fighting
[10] => haha tabby war
[11] => haha tabby fighting
[12] => haha kitty war
[13] => haha kitty fighting
[14] => haha puss war
[15] => haha puss fighting
[16] => lol cat war
[17] => lol cat fighting
[18] => lol tabby war
[19] => lol tabby fighting
[20] => lol kitty war
[21] => lol kitty fighting
[22] => lol puss war
[23] => lol puss fighting
)
结果(使用 dog
而不是cat
)https://3v4l.org/ICbZ6
Array
(
[0] => funny dog war
[1] => funny dog fighting
[2] => haha dog war
[3] => haha dog fighting
[4] => lol dog war
[5] => lol dog fighting
)
不要忘记在你的家庭作业中引用这个答案;p