Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Kombinacja wyrazów.
Haldir
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 12.08.2009

Ostrzeżenie: (0%)
-----


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];
}
}
}
}
?>


Ten post edytował Haldir 18.06.2011, 16:02:31
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
drPayton
post
Post #2





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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 ^^
Go to the top of the page
+Quote Post
Pawel_W
post
Post #3





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Haldir
post
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 12.08.2009

Ostrzeżenie: (0%)
-----


Działa tak jak chciałem smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 21:22