Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dziwne zliczanie danych w foreach
Forum PHP.pl > Forum > PHP
Largo
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
erix
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
Largo
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ć? :-)
erix
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.
Largo
  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
erix
A nie styknęłoby array_sum" title="Zobacz w manualu PHP" target="_manual?
Largo
W sumie to pasi, ale jak zliczyć wcześniej checkbox, aby wiedzieć ile zliczyć i co? :->
erix
  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?
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.