Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jaka funkcja lub algorytm.
Forum PHP.pl > Forum > Przedszkole
woxala123
Witam.
Mam taki oto np- układ liczb 123. I chcę zrobić tak by pokazywano mi że powstają z tego 3 parki 1,2- 2,3-1,3 i zlicza że są 3 pary.
Jaką funkcję zastosować lub jakiś podobny przykład.
POZDRAWIAM
trueblue
Kombinacje bez powtórzeń.
woxala123
Zrobiłem coś takiego teraz
  1. $words = array('21', '24', '31');
  2.  
  3. $num = count($words);
  4.  
  5.  
  6.  
  7. //The total number of possible combinations
  8.  
  9. $total = pow(2, $num);
  10.  
  11.  
  12.  
  13. //Loop through each possible combination
  14.  
  15. for ($i = 0; $i < $total; $i++) {
  16.  
  17. //For each combination check if each bit is set
  18. for ($j = 0; $j < $num; $j++) {
  19.  
  20. //Is bit $j set in $i?
  21.  
  22. if (pow(2, $j) & $i) echo $words[$j] . ' ';
  23.  
  24. }

i wynik tego działania jest taki
21
24
21 24
31
21 31
24 31
21 24 31
Tylko chcę by pokazały mi się same parki. Nie wiem które działanie za to odpowiada.
trueblue
  1. $words = array('21', '24', '31');
  2.  
  3. for($k = 0; $k<=2; $k++) {
  4. for ($n = $k; $n < count($words); $n++) {
  5. if ($words[$k] != $words[$n] ) {
  6. echo $words[$k] . "," . $words[$n] . " ";
  7. }
  8. }
  9. }
woxala123
Fajnie że pomogłeś a czy jeszcze to idzie rozpisac np: na trójki i jak policzyć liczbę kombinacji razem?
Spawnm
Liczbę kombinacji policzysz implementując wzór: https://pl.wikipedia.org/wiki/Kombinacja_be...%C3%B3rze%C5%84

Ewentualnie inkrementuj w iteracji
woxala123
okey zrobiłem takie rozwiązanie
  1.  
  2. $numbers = array(1,2,45,65,67,8);
  3.  
  4.  
  5.  
  6. $solutions = array();
  7.  
  8. function generate($k, $solution)
  9. {
  10. global $solutions, $numbers;
  11. if (count($solution) == 4) {
  12. $solutions[] = $solution;
  13. }
  14. if (count($solution) < 4)
  15. for ($i = $k; $i < count($numbers); $i++) {
  16. $solution[] = $numbers[$i];
  17. generate($i + 1, $solution);
  18. array_pop($solution);
  19. }
  20.  
  21. }
  22.  
  23. generate(0, array());
  24.  
  25. echo "<P>Razem kombinacji:" . count($solutions) . "</p>";
  26. echo "<p> rozwiązania: </p>";
  27. foreach ($solutions as $sol) {
  28. echo "<p> {$sol[0]} {$sol[1]} {$sol[2]} {$sol[3]} </p>";
  29. }
  30.  


Tylko teraz chcę dane liczb wprowadzać przez formularz i zrobiłem coś takiego
  1. <form action="mor.php" method="POST">
  2.  
  3.  
  4. <div>
  5. <label for="numbers">Wprowadź liczby</label>
  6. <input id="numbers" name="numbers" class="text" type="text" />
  7. </div>
  8.  
  9. <div>
  10. <input class="submit" type="submit" value="Wyślij" />
  11. </div>
  12.  
  13. </form>
  14.  

  1.  
  2. $numbers = $_POST['array()'];
  3.  
  4.  
  5. $solutions = array();
  6.  
  7. function generate($k, $solution)
  8. {
  9. global $solutions, $numbers;
  10. if (count($solution) == 4) {
  11. $solutions[] = $solution;
  12. }
  13. if (count($solution) < 4)
  14. for ($i = $k; $i < count($numbers); $i++) {
  15. $solution[] = $numbers[$i];
  16. generate($i + 1, $solution);
  17. array_pop($solution);
  18. }
  19.  
  20. }
  21.  
  22. generate(0, array());
  23.  
  24. echo "<P>Total number of combinations:" . count($solutions) . "</p>";
  25. echo "<p> solutions: </p>";
  26. foreach ($solutions as $sol) {
  27. echo "<p> {$sol[0]} {$sol[1]} {$sol[2]} {$sol[3]} </p>";
  28. }
  29.  

No i niestety nic nie wychodzi bo jak wprowadzam wartości to nic nie oblicza kombinacji. Gdzie robię błąd.?
Pozdrawiam
nospor
Naprawde po takim czasie z php jeszcze nie ogarniasz formularzy?
Co to niby ma byc:
$numbers = $_POST['array()'];
questionmark.gif
woxala123
Wiem że jest to gó...o. Tylko nie wiem jak ogarnąć ten formularz.

To gdzie zacząć poprawiać?
Proszę o pomoc
nospor
Nie
$numbers = $_POST['array()'];

a:
$numbers = $_POST['numbers'];

Toz twoje pole w formularzu nazywa sie NUMBERS a nie ARRAY() no nie?

edit: a dokladniej
$numbers = explode(',', $_POST['numbers']);
Przy zalozeniu ze w input wpiszesz liczby oddzielone przecinkiem
woxala123
  1. <form action="mor.php" method="POST">
  2. <fieldset>
  3.  
  4.  
  5. <div>
  6. <label for="numbers">Wprowadź liczby</label>
  7. <input id="numbers" name="numbers" class="text" type="text" />
  8. </div>
  9.  
  10. <div>
  11. <input class="submit" type="submit" value="Wyślij" />
  12. </div>
  13.  
  14. </fieldset>
  15. </form>
  16. <?php
  17. $numbers = explode(',', $_POST['numbers']);
  18.  
  19. $numbers=array();
  20.  
  21. $solutions = array();
  22.  
  23. function generate($k, $solution)
  24. {
  25. global $solutions, $numbers;
  26. if (count($solution) == 4) {
  27. $solutions[] = $solution;
  28. }
  29. if (count($solution) < 4)
  30. for ($i = $k; $i < count($numbers); $i++) {
  31. $solution[] = $numbers[$i];
  32. generate($i + 1, $solution);
  33. array_pop($solution);
  34. }
  35.  
  36. }
  37.  
  38. generate(0, array());
  39.  
  40. echo "<P>Total number of combinations:" . count($solutions) . "</p>";
  41. echo "<p> solutions: </p>";
  42. foreach ($solutions as $sol) {
  43. echo "<p> {$sol[0]} {$sol[1]} {$sol[2]} {$sol[3]} </p>";
  44. }
  45.  
  46.  
  47. ?>
  48.  

I nie oblicza kombinacji mimo że np: wprowadzam w pole input 21,24,45,56,67,
Okey dziala wywaliłem z kodu zmienną members=array().
Dzięki nospor no teraz to już tylko Tobie piwo postawić
nospor
Wez wlacz myslenie...

$numbers = explode(',', $_POST['numbers']);
$numbers=array();

Najpierw pobierasz dane z forma a zaraz potem nadpisujesz je pusta tablica... Gdzie tu logika?!
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.