Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wyeliminowac "inwersje" w kodzie (petli)?
Forum PHP.pl > Forum > PHP
AndyPSV
Jak wyleminowac w najskuteczniejszy sposob powtorzenia w parach walut, czyli: 1 -> PLN / EUR, 2 -> EUR / PLN (to wyelimowac zeby tylko PLN / EUR zostalo)

KOD.

  1. $q_curr = q('SELECT * FROM `'.PRFX.'curr'.LG.'`'); if(n_r($q_curr) == 0) die(H.'no currencies'); while($_curr = f($q_curr)) $curr[] = $_curr;
  2.  
  3. # 2. CREATE ALL CURRENCY PAIR COMBINATIONS, BY DOING 2x FOREACH at the same VALUE; ELIMINATING INVERSIONS eg. PLN / EUR, EUR / PLN
  4. foreach($curr as $k => $val) {
  5. foreach($curr as $v) {
  6. if($curr[$k]['t'] <> $v['t']) {
  7. echo $curr[$k]['t'].' / '.$v['t'].'<br/>';
  8. }
  9. }
  10. }


  1. CREATE TABLE `x_curr_pl` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `t` char(3) NOT NULL,
  4. PRIMARY KEY (`id`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=6 ;
  6.  
  7. --
  8. -- Dumping data for table `x_curr_pl`
  9. --
  10.  
  11. INSERT INTO `x_curr_pl` (`id`, `t`) VALUES
  12. (1, 'PLN'),
  13. (2, 'EUR'),
  14. (3, 'USD'),
  15. (4, 'GBP'),
  16. (5, 'CHF');



  1. PLN / EUR
  2. PLN / USD
  3. PLN / GBP
  4. PLN / CHF
  5. EUR / PLN
  6. EUR / USD
  7. EUR / GBP
  8. EUR / CHF
  9. USD / PLN
  10. USD / EUR
  11. USD / GBP
  12. USD / CHF
  13. GBP / PLN
  14. GBP / EUR
  15. GBP / USD
  16. GBP / CHF
  17. CHF / PLN
  18. CHF / EUR
  19. CHF / USD
  20. CHF / GBP
Crozin
To co chcesz uzyskać to dwuelementowa wariacja bez powtórzeń.

W sieci jest pełno przykładów jak wybrać wszystkie elementy takiego czegoś.
AndyPSV
Szukalem ale rozwiazania w postaci kodu php nie znalazlem.

Ja mam pare rozwiazan ale przy 100 * k permutacji skrypt bedzie sie zbyt dlugo wykonywal, a zalezy mi na tym aby to byl czas najkrotszy.
Moglbys podac rozwiazanie?
wookieb
  1. $tab = range(1,5); // tutaj twoja tablic walut
  2.  
  3. $length = count($tab);
  4. $l1 = 0;
  5. $l2 = 0;
  6.  
  7. for($l1 = 0; $l1<($length-1); $l1++)
  8. {
  9. for($l2 = $l1+1; $l2<$length; $l2++)
  10. {
  11. echo $tab[$l1].' / '.$tab[$l2].PHP_EOL;
  12. }
  13. }
AndyPSV
dzieki stary pomogles bardzo!
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.