Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Kombinacja wyrazów.
Forum PHP.pl > Forum > PHP
Haldir
Witam,

zdaję sobię sprawę, że było to wałkowane już x razy, ale po przetestowaniu każdego z kodu na kombinacje jestem nie do końca zadowolony.


Otóż potrzebuję stworzyć kod który będzie wyświetlał wszystkie możliwe ustawienia 14 wyrazów składającą się z 4 elementów bez powtórzeń.

Czyli:


Wyraz 1, Wyraz 2 ... Wyraz 14

W efekcie chciałbym otrzymać wynik w postaci:

W1 - W2 - W3 - W4
W4 - W2 - W1 - W16

i tak dalej


Przykładowy kod z którym pracowałem, jednak nie bardzo się sprawdza.

Kod
<?php
$ar1=array('El + ','Eld + ','Tir + ','Nef + ','Eth + ','Ith + ','Ral + ','Ort + ','Thul + ','Amn + ','Sol + ','Shael + ','DOL + ','HEL + ');
for($i=0; $i<=17; $i++)
{
for($j=$i;$j<count($ar1);$j++)
{
for($k=$j;$k<count($ar1);$k++)
{
for($l=$k;$l<count($ar1);$l++)
{

print "<br>".$ar1[$i].$ar1[$j].$ar1[$k].$ar1[$l];
}
}
}
}
?>
drPayton
http://porady-it.org/index.php/php/jak-wys...ego-zbioru.html
  1. function kombinacje($zbior, $k) {
  2. global $wynik;
  3. $dlugosc = count($zbior);
  4. if($dlugosc > $k)
  5. foreach($zbior as $klucz => $wart)
  6. kombinacje(array_diff_key($zbior, array($klucz => $wart)), $k);
  7. else
  8. $wynik[] = $zbior;
  9. return $wynik;
  10. }
  11.  
  12.  
  13. print_r(kombinacje(range('a', 'n'), 4));


Znalezienie na googlach zabrałoby Ci kilkukrotnie mniej czasu, niż napisanie tego postu. Nawet jeśli powyższe ma błąd (nie sprawdzałem) to masz dziesiątki innych gotowców ^^
Pawel_W
albo przerabiając kod kolegi z pierwszego postu:
  1. <?php
  2. $ar1=array('El + ','Eld + ','Tir + ','Nef + ','Eth + ','Ith + ','Ral + ','Ort + ','Thul + ','Amn + ','Sol + ','Shael + ','DOL + ','HEL + ');
  3. $count = count($ar1);
  4. for($i=0; $i < $count; $i++)
  5. {
  6. for($j=0; $j < $count; $j++)
  7. {
  8. if($ar1[$i] == $ar1[$j]) continue;
  9. for($k=0; $k < $count; $k++)
  10. {
  11. if($ar1[$i] == $ar1[$k]) continue;
  12. if($ar1[$j] == $ar1[$k]) continue;
  13. for($l=0; $l < $count; $l++)
  14. {
  15. if($ar1[$i] == $ar1[$l]) continue;
  16. if($ar1[$j] == $ar1[$l]) continue;
  17. if($ar1[$k] == $ar1[$l]) continue;
  18. print "<br>".$ar1[$i].$ar1[$j].$ar1[$k].$ar1[$l];
  19. }
  20. }
  21. }
  22. }
  23. ?>

"pisane z palca, nie wiem czy zadziała" biggrin.gif
Haldir
Działa tak jak chciałem smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.