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
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

Posty w temacie


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

 



RSS Aktualny czas: 3.10.2025 - 03:15