很抱歉,我甚至不能提供我已经尝试过的东西,因为我甚至不知道从哪里开始。
我有这个变位解算器,这工作得很好,问题是,我想要能够添加的能力,允许用户包括一个?作为通配符进入字段。
例如,假设用户输入他们的字母fjsiem?显然?意思是任何字母。因此,结果将显示与字段中的字母匹配的单词以及包含任何附加字母的任何其他单词。
我还希望能够指出每个包含通配符的单词中的通配符(字母),以便我可以更改其颜色,以便用户知道哪些单词具有通配符。
有没有人可以看看我的代码并帮助我?
被调用的单词文件是组合式的。txt,它只是在每一行中包含单词。
<?
if(!empty($_POST['l'])) {
$time_start = microtime(true);
$l = $_POST['l'];
$l = strtolower($l);
$len = strlen($l);
$a = array('a' => 1, 'b' => 1, 'c' => 1, 'd' => 1, 'e' => 1, 'f' => 1, 'g' => 1, 'h' => 1, 'i' => 1, 'j' => 1, 'k' => 1, 'l' => 1, 'm' => 1, 'n' => 1, 'o' => 1, 'p' => 1, 'q' => 1, 'r' => 1, 's' => 1, 't' => 1, 'u' => 1, 'v' => 1, 'w' => 1, 'x' => 1, 'y' => 1, 'z' => 1);
function contains($word) {
$wlen = strlen($word);
if($wlen < 2 || $wlen > 10) return FALSE;
for($i = 0; $i < $wlen; $i++) {
$w[$i] = $word[$i];
}
$b = $GLOBALS['b'];
foreach($b as $n => $c) {
foreach($w as $k => $v) {
if($v == $c) {
unset($w[$k]);
unset($b[$n]);
break;
}
}
}
if(count($w) > 0) return FALSE;
return TRUE;
}
for($i = 0; $i < $len; $i++) {
$b[$i] = $l[$i];
unset($a[$l[$i]]);
}
$e = 'cat combined.txt';
while(list($k) = each($a)) {
if(!$e) {
$e = "grep -v $k combined.txt";
} else {
$e .= ' | grep -v '. $k;
}
}
exec($e, $o);
settype($w, 'array');
foreach($o as $v) {
if(contains($v)) {
$w[] = $v;
}
}
function mycmp($a, $b) {
$ca = strlen($a);
$cb = strlen($b);
if($ca == $cb) return 0;
if($ca > $cb) return 1;
return -1;
}
usort($w, 'mycmp');
$wc = 0;
foreach($w as $v) {
$c = strlen($v);
if($wc != $c) {
echo "<p>'n";
echo "<b>$c letter words</b><br>";
}
$wc = $c;
echo "$v ";
}
}
?>
如果你想变得非常懒惰,你总是可以解决fjsiem?通过fjsiemz在fjsiema上运行工作代码。
如果我没看错你的代码,你会发现单词列表中只有f,然后是j,然后是s,然后是I,然后是e,然后是m。因此,剩下的所有长度为7个字母的单词,.{7}必须符合您的标准。