Skrypt PHP Każdy z każdym

Pytania i odpowiedzi dotyczące użytkowania programu LottoCAD

Skrypt PHP Każdy z każdym

Postby Kmicic » 2014-04-17, 10:43

Witam zamieszczam skrypt do mnozenia zbiorów. Dla przykładu masz zestaw PEWNYCH par i trójek aby je zmieszać ten skrypt zrobi to za ciebie. Na wyjsciu wg zasady kazda kombinacja z każdą uzyskasz zestaw piatek. Jezeli Twoja jedna z par trafiła i trafi jedna z Twoich trójek to w zestawie bedzie piatka.
Skrypt ma trzy parametry :
    $remove_duplicates =true; // =false jeżeli duplikaty w linii są potrzebne przykład linia wyjściowa : 10 10 32 17 28,
    =true jezeli duplikatów jest brak, przykład 10 32 17 28
    $duplicates_out = true; // =true nie wyświetlaj okrojonych zestawów zestaw jw 10 32 17 28 nie bedzie wyswietlony, false bedzie wyświetlony 10 32 17 28 :
    $sorted = true; // = false jeżeli liczby maja byc nie sortowane przykład : 10 32 17 28 gdy =true bedą posortowane w liniach 10 17 28 32

Na YouTube jest znów film instrukcja do tego skryptu :
https://www.youtube.com/watch?v=BfWgFySy6Gg


Code: [Select all] [Expand/Collapse] [Download] (all2all.php)
  1. <?php
  2.  /*  skrypt mnoży zestawy z pola "zakłady" i pola "wyniki"
  3.  /   każdy z każdym. Dwa pierwsze wiersze to parametry
  4.  /   jezeli nie chcesz aby w zestawach liczby były unikalne
  5.  /   ustaw parametr  $remove_duplicates    =true (false wyłacza opcję)
  6.  /   jeżeli chcesz wynik posortować w wierszach ustaw parametr
  7.  /   $sorted              = true;
  8.  /   wynik wyświetla się w polu wybranym w opcjach SkryptyPHP->Opcje->
  9.  /   wyjscie do lewego lub prawego panela. Rezultat zamazuje wówczas
  10.  /   zestaw wejsciowy. Aby wrócić do zestawu mozesz wcisnąć klawisze
  11.  /   ctrl+c aż pojawi sie zestaw wejsciowy ponownie.
  12.  */
  13.  
  14. $remove_duplicates    =true;  // =false jeeli duplikaty w linii są potrzebne
  15. $duplicates_out      = true; // =true nie wyświetlaj okrojonych zestawów
  16. $sorted              = true;  // = false jeżeli liczby maja byc nie sortowane
  17.  
  18. $memoa=trim(delphi_str_memoa());  // pobiera zestaw z pola zakłady
  19. $memob=trim(delphi_str_memob());  // jw z pola wyniki (trim czysci puste spacje)
  20.  
  21. $linesa=preg_split("'\r?\n'",$memoa); // zestawy rozdziela do tablic wg
  22. $linesb=preg_split("'\r?\n'",$memob); // znaków końca linii za pomocą wyrażenia regularnego
  23. // wyrażenie w wolnym tłumaczeniu oznacza, rozdziel tekst jak trafisz lub nie na znak
  24. // powrotu karetki(\r?) i na znak końca linii (\n). Dla Windowsa końcem linii jest para \r\n
  25. // dla unixa tylko (\n) dlatego znak warunku ? za znakiem \r - 0 lub 1 raz.
  26.  
  27. foreach($linesa as $la) // linie rozdzielone na tablice znakow
  28.         $arra[]=preg_split("'[^0-9]+'", trim($la));
  29. foreach($linesb as $lb)
  30.         $arrb[]=preg_split("'[^0-9]+'", trim($lb));
  31. // linie rozdziela się wyrażeniem regularnym grupujacym znaki z negacją
  32. // [^0-9]+ co znaczy NIE znaki z zakresu 0-9 a wiec zestawy moga być
  33. // rozdzielone dowolnym znakiem np 1,2,3,4 lub 1:2:3:4 ..., znak plus(+)
  34. // za grupa mówi ze znaków moze być 1 lub wiecej razy.
  35.  
  36. $out=array(); // deklaracja pustej tablicy wyjscowej
  37.  
  38. // ty zaczyna sie pętla iteracji po tablicach, jest zagnieżdzona wiec
  39. // bedzie spełniony warunek kazda z kazdym
  40. foreach($arra as $a) { // dla wszystkich tablic z pola "zakłady"
  41.     $cnta = count($a);
  42.     foreach($arrb as $b) { // dla wszystkich tablic z pola "wyniki"
  43.        $cntb = count($b);
  44.        $x=(array_merge($a,$b)); // złóż w jedną tablicę
  45.        if ($duplicates_out==true && count($x)!=$cnta+$cntb) continue;
  46.        if ($remove_duplicates==true) $x=array_unique($x);  // usuń duplikaty - opcja
  47.        if ($sorted==true) sort($x);  // posortuj tablicę - opcja
  48.        $out[]=$x;  // gotowa tablica do deklarowanej tablicy wyjscowej
  49.     // jako nastepny element [], indeksem tablicy będzie kolejny numer elementu
  50.     // od zera począwszy.
  51.     }
  52. }
  53.  
  54. // wyświetlamy wyniki
  55. foreach($out as $lines) {   // dla kazdej tablicy (linii) w tablicy wyjsciowej
  56.    foreach($lines as $num) { // dla kazdej liczby
  57.        echo sprintf("%2d ",$num); // wyświetl liczbę zformatowaną wyrażeniem
  58.        // "%2d " co znaczy wyreowadź liczbe jako dwa znaki (przed liczby
  59.        // jednoznakowe wstawiana jest spacja i za liczbą wstaw równiez pustą spację
  60.        // jezeli chcesz aby znakiem rozdzielajacym był znak tabulacji (tab) to wzor
  61.        // formatowania powinien wyglądać : "%2d\t".
  62.    }
  63.    echo "\n";   // zakończ kazdą linie znakiem końca linii. można wstawić typowy znak
  64.    // końca linii dla windowsa czyli "\r\n".
  65. }
  66.  
  67. ?>
GeSHi © Codebox Plus
--
Wojtek
Audaces fortuna iuvat - śmiałym szczęście sprzyja
User avatar
Kmicic
Administrator
 
Posts: 708
Joined: 2006-11-28, 00:40
Location: Obywatel świata

Return to LottoCAD pytania i odpowiedzi

Who is online

Users browsing this forum: No registered users and 1 guest

cron