Kiedyś używałem takiej klasy do Szufelki (coś jak scrabble) w której przeszukiwałem słownik "sjp"
Tyle że ona jest bez powtórzeń, i polecam się zastosować do rad ~Crozin-a, robiłem to na takiej samej zasadzie,
Cytat z posta z 2011r.
Cytat
Ja akurat używałem tej klasy do gry "szufelka" generowałem sobie słowa od 3 do 7 liter tak ze to nie robiło jakiegoś strasznego zamulenia, i wszystko było oparte o bazę danych,
skracając wyszukiwanie weź pod uwagę to ze czasami z jednego słowa można ułożyć tez inne, np: masło, słoma, i te literki są już takie same. takich słówek jest w tym słowniku bardzo dużo.
wiec zasada działanie była trochę u mnie inna nie przeszukiwałem słówek lecz miałem słowa ułożone w kolejności alfabetycznej w bazie czyli np: masło to miałem 'ałmos' ze słomy litery są takie same, miałem je zahashowane (sha1) i porobione dowiązania, jeden hash kilka słówek, wyszukując po hashu zaoszczędzałem sporo czasu. możesz pokombinować na różne sposoby, odciążając trochę serwer nie musisz od razu wyszukiwać slow składających się z 3, 4, 5, 6, 7, 8, 9 znaków tylko osobno, weź pod uwagę tez ze w grze w scrabble rzadko układasz bardzo długie słowa, wiec słowa np które maja powyżej 10 czy tam więcej znaków nie będą ci potrzebne wiec możesz je usunąć, a tym samym odchudzisz plik o prawie polowe. zaglądając w ten plik sjp widziałeś pewnie jakie tam są słowa.
<?php
class Combinations implements Iterator
{
protected $c = null;
protected $s = null;
protected $n = 0;
protected $k = 0;
protected $pos = 0;
function __construct($s, $k) {
$this->n = count($this->s); } else {
$this->s = (string) $s;
}
$this->k = $k;
$this->rewind();
}
return $this->pos;
}
for($i = 0; $i < $this->k; $i++)
$r[] = $this->s[$this->c[$i]];
}
if($this->_next())
$this->pos++;
else
$this->pos = -1;
}
$this->c = range(0
, $this->k); $this->pos = 0;
}
function valid() {
return $this->pos >= 0;
}
//
protected function _next() {
$i = $this->k - 1;
while ($i >= 0 && $this->c[$i] == $this->n - $this->k + $i)
$i--;
if($i < 0)
return false;
$this->c[$i]++;
while($i++ < $this->k - 1)
$this->c[$i] = $this->c[$i - 1] + 1;
return true;
}
}
$aaa = array('k', 'a', 'z', 'm', 'r');
//Użycie klasy new Combinations('słówka, literki', 'wynik z ilu liter')
foreach(new Combinations($aaa, 3) as $k => $v)
Co da wynik:
1 a,k,m
2 a,k,r
3 a,k,z
4 a,m,r
5 a,m,z
6 a,r,z
7 k,m,r
8 k,m,z
9 k,r,z
10 m,r,z
?>