Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dziwne zliczanie danych w foreach
Largo
post
Post #1





Grupa: Zarejestrowani
Postów: 203
Pomógł: 6
Dołączył: 11.09.2005

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


Witam,

Mam pewien problem z foreach i instrukcjami w jej środku. Oto kod:

  1. <?php
  2.        $red     = 1;
  3.        $bold    = 1;
  4.        $italic  = 1;
  5.  
  6.        $items   = array( $red => 10, $bold => 10, $italic => 10 );
  7.  
  8.        $tmp_sum = 0;
  9.        $count   = 0;
  10.        
  11.        foreach ( $items AS $k => $v )
  12.        {
  13.            if ( $tmp_sum <= 400 )
  14.            {
  15.                $tmp_sum = $tmp_sum + $v;
  16.            }
  17.            else
  18.            {
  19.                break;
  20.            }
  21.            $count++;
  22.        }
  23.        echo  'Kwota = '.$tmp_sum.' | Liczba przeliczeń = '.$count;
  24.        
  25. ?>


Został on napisany do testowania, inny działa na skrypcie gotowym, ten jest do testów. Skrypt ma za zadanie sprawdzać 3 zmienne, na samej górze. Następnie na ich podstawie policzyć kwotę łączną, mimo to, dostaję bardzo dziwne dane. Oto link do skryptu na moim serwerze:

Test

Proszę mi wyjaśnić dlaczego tak się dzieje? Dlaczego tak dziwnie zlicza dane?

Pozdrawiam,
Largo
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ponieważ w tablicy tak naprawdę masz tylko jeden wpis. winksmiley.jpg

  1. <?php
  2. $items   = array( $red => 10, $bold => 10, $italic => 10 )
  3. ?>

:
  1. <?php
  2. $items   = array( 1=>10, 1 => 10, 1 => 10 )
  3. ?>

winksmiley.jpg

PS.
  1. <?php
  2. $tmp_sum = $tmp_sum + $v;
  3. ?>

Za dużo w Pascalu siedziałeś. tongue.gif


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Largo
post
Post #3





Grupa: Zarejestrowani
Postów: 203
Pomógł: 6
Dołączył: 11.09.2005

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


Hehe, akurat to kolego pisał, ja poprawiłem na:

  1. <?php
  2. $tmp_sum += $v;
  3. ?>


Ale co do tematu, to jak mam to poprawić? :-)
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Masz przecież kilka tych samych kluczy w tablicy.

To tak, jakbyś zrobił:
  1. <?php
  2. $x = 12;
  3. $x = 10;
  4. $x = 1;
  5. //...
  6. ?>

Bo nie masz różnych kluczy w tablicy, tylko trzy razy ten sam.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Largo
post
Post #5





Grupa: Zarejestrowani
Postów: 203
Pomógł: 6
Dołączył: 11.09.2005

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


  1. <?php
  2. $red     = $this->ipsclass->input['enablered'];
  3.        $bold    = $this->ipsclass->input['enablebold'];
  4.        $italic  = $this->ipsclass->input['enableitalic'];
  5.  
  6.        $items   = array ( 'red' => $this->ipsclass->vars['red_title_cost'], 'bold' => $this->ipsclass->vars['bold_title_cost'], 'italic' => $this->ipsclass->vars['italic_title_cost'] );
  7.  
  8.        $tmp_sum = 0;
  9.        $count   = 0;
  10.        $payable = array(); // Ta pomocnicza do $k, na razie jednak nie mam idea biggrin.gif
  11.      
  12.        foreach ( $items AS $k => $v )
  13.        {
  14.            if ( $tmp_sum <= $this->ipsclass->member['fg'] )
  15.            {
  16.                $tmp_sum += $v;
  17.            }
  18.            else
  19.            {
  20.                break;
  21.            }
  22.            $count++;
  23.        }
  24.        
  25.        if ( $count )
  26.        {
  27.            $this->ipsclass->DB->do_update( 'members', array( 'fg'=> $this->ipsclass->member['fg'] - $tmp_sum ) , 'id='.$this->ipsclass->member['id'] );
  28.        }
  29. ?>


OK, na żywym kodzie Ci to przedstawię. $this->ipsclass->input zwraca wartości dla zaznaczonego checkbox. Albo 1, albo 0. Muszę policzyć ilość zaznaczonych checkbox, następnie policzyć kwotę za nie, od tego jest $this->ipsclass->vars. Potem jak widzisz, muszę zsumować i odjąć userowi od konta. Jak ten problem rozwiązać?

Pozdrawiam,
Largo
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A nie styknęłoby array_sum" title="Zobacz w manualu PHP" target="_manual?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Largo
post
Post #7





Grupa: Zarejestrowani
Postów: 203
Pomógł: 6
Dołączył: 11.09.2005

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


W sumie to pasi, ale jak zliczyć wcześniej checkbox, aby wiedzieć ile zliczyć i co? :->
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. <?php
  2. $items   = array ( 'red' => $this->ipsclass->vars['red_title_cost'], 'bold' => $this->ipsclass->vars['bold_title_cost'], 'italic' => $this->ipsclass->vars['italic_title_cost'] );
  3. $sum = array_sum($items);
  4. ?>

Przecież chyba wszystko masz, nie?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
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 - 04:16