Sizin böyle bir şey nasıl çalıştığını arıyorsanız, bu i ikili kullanarak php kütüphaneleri ile başarılmıştır nasıl.
function search_get_combos($query){
$list = explode(" ", $query);
$bits = count($list); //bits of binary number equal to number of words in query;
//Convert decimal number to binary with set number of bits, and split into array
$dec = 1;
$binary = str_split(str_pad(decbin($dec), $bits, '0', STR_PAD_LEFT));
while($dec < pow(2, $bits)) {
//Each 'word' is linked to a bit of the binary number.
//Whenever the bit is '1' its added to the current term.
$curterm = "";
$i = 0;
while($i < ($bits)){
if($binary[$i] == 1) {
$curterm .= $list[$i]." ";
}
$i++;
}
$terms[] = $curterm;
//Count up by 1
$dec++;
$binary = str_split(str_pad(decbin($dec), $bits, '0', STR_PAD_LEFT));
}
return $terms;
}
Bu rağmen sadece eşsiz kombinasyonu dönecektir, ancak örnekte bu çıkışları kolayca kombinasyonların her türlü sipariş almak için uzatılabilir unutmayın:
Array
(
[0] => fish
[1] => dog
[2] => dog fish
[3] => cat
[4] => cat fish
[5] => cat dog
[6] => cat dog fish
)
Edit (More clarification)
Basic theory
Bu yüzden öncelikle, Bildiğiniz gibi ikili sayılar 1 ve 0 bir dize vardır. Sayısının uzunluğu bulunur bit 'sayısı, eg. numarası 011001
6 bit (durumda ilgilenen yılında numaralar 25) sahiptir. Durum 0 ise, göz ardı edilir ise daha sonra, sayının her bit terimlerin birine tekabül ediyorsa, her seferinde, yukarı sayar bit 1 ise, terim çıktı dahildir. Peki ne oluyor temel teorisi bu.
Delving into the code
PHP ikili sayma bir yolu vardır, ancak ikili ondalık dönüştürebilirsiniz. Yani bu fonksiyon aslında onluk kadar sayar ve bu ikili dönüştürür. Bit sayısı önemlidir çünkü her dönem kendi biraz ihtiyacı var gibi ama, bunu bu biraz ne şu, 0 önde gelen eklemek gerekir: str_pad(decbin($dec), $bits, '0', STR_PAD_LEFT)
Şimdi bu fonksiyonu bir süre döngü kullanır, ama kaç kez olarak orada kaç terim bağlı döngü değişikliklere ihtiyacı, matematik biraz yapılması gerekiyor. Hiç ikili ile çalıştı varsa, yapabileceğiniz maksimum sayı 2 ^ n (n bit sayıdır) olduğunu bilecek.
Elimden bir şey özledik eğer bana bildirin, fonksiyonun bütün kafa karıştırıcı bit örtülü olması gerektiğini düşünüyorum.
See what's happening
Kullanılan mantık, bu bu şekilde görünce biraz daha mantıklı olabilir çıkışına aşağıdaki kodu kullanabilirsiniz!
function search_get_combos_demo($query){
$list = explode(" ", $query);
$bits = count($list);
$dec = 1;
while($dec < pow(2, $bits)) {
$binary = str_split(str_pad(decbin($dec), $bits, '0', STR_PAD_LEFT));
$curterm = "";
$i = 0;
while($i < ($bits)){
if($binary[$i] == 1) {
$curterm[] = $list[$i]." ";
}
$i++;
}
//-----DISPLAY PROCESS-----//
echo "Iteration: $dec <table cellpadding=\"5\" border=\"1\"><tr>";
foreach($binary as $b){
echo "<td>$b</td>";
}
echo "</tr><tr>";
foreach($list as $l){
echo "<td>$l</td>";
}
echo "</tr></table>Output: ";
foreach($curterm as $c){
echo $c." ";
}
echo "<br><br>";
//-----END DISPLAY PROCESS-----//
$terms[] = $curterm;
$dec++;
}
return $terms;
}