Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pętla foreach
Forum PHP.pl > Forum > Przedszkole
bliitz
Witam

problem polega na tym, że pętla przy pierwszym "obrocie" zwraca wszystkie pobrane rekordy, zamiast tylko wybranych, natomiast kolejne "obroty" zwracają już prawidłowe dane, poniżej zamieszczam kod pętli
  1. <?php
  2. $base = array('baza1', 'baza2', 'baza3');
  3. foreach( $base as $baza ) {
  4.  
  5.    $query = $mysql->dbSelect( 'SELECT `personel`.*,`personel_grupy`.nazwa_grupy
  6.                              FROM ('.$baza.'.personel, '.$baza.'.personel_grupy)
  7.                              WHERE personel.id_grupy=personel_grupy.id
  8.                              ORDER BY personel.nazwisko, personel.imie ' );
  9.    $i=0;
  10.  
  11.    foreach( $query as $P ){
  12.        $arr[ $P[ 'login' ] ][ 'imie' ] = $P[ 'imie' ];
  13.        $arr[ $P[ 'login' ] ][ 'nazwisko' ] = $P[ 'nazwisko' ];
  14.        $arr[ $P[ 'login' ] ][ 'komorka' ] = $P[ 'komorka' ];
  15.        $arr[ $P[ 'login' ] ][ 'login' ] = $P[ 'login' ];
  16.        $arr[ $P[ 'login' ] ][ 'id' ] = $P[ 'id' ];
  17.        $arr[ $P[ 'login' ] ][ 'email' ] = $P[ 'email' ];
  18.        $arr[ $P[ 'login' ] ][ 'spolka' ] .= $baza.',';
  19.  
  20.        if( $i > 0 ){
  21.                if( array_key_exists( $P[ 'login' ], $arr ) ) {
  22.  
  23.                    $arr[ $P[ 'login' ] ][ $baza ] = '1';
  24.                }          
  25.        }else {
  26.            $arr[ $P[ 'login' ] ][ $baza ] = '1';
  27.            if ( $P[ 'wycofany' ][ $baza ] == '1' ) {
  28.                $arr[ $P[ 'login' ] ][ $baza ] = '2';                    
  29.            }
  30.        }
  31.    }  
  32. }
  33. ?>


konkretnie chodzi o $arr[ $P[ 'login' ] ][ 'spolka' ] .= $baza.','; dlaczego za pierwszym razem zwraca wszystkie tzn. przykładowo

baza1baza1baza1baza1baza1baza1baza1baza2baza2baza2baza2baza2baza2baza2baza2baza2
aza2baza2baza3baza3baza3baza3baza3baza3baza3
a w kolejnych już prawidłow czyli np:
baza1, baza2
baza1,
baza1, baza2, baza3
itd.
melkorm
  1. <?php
  2. var_dump($query);
  3. ?>


to by nam się przydało winksmiley.jpg
bliitz
przykładowe:

Kod
Array
(
    [imie] => marian
    [nazwisko] => kowalski
    [komorka] =>
    [login] => nikow
    [id] => 35
    [email] =>
    [spolka] => victoria,victoria,victoria,victoria,victoria,victoria,victoria,victoria,victoria
victoria,victoria,victoria,victoria,victoria,victoria,victoria,victoria,victoria
victoria,victoria,victoria,victoria,victoria,victoria,victoria,victoria,victoria
victoria,victoria,victoria,victoria,victoria,victoria,victoria,victoria,victoria
victoria,victoria,victoria,victoria,victoria,victoria,victoria,victoria,victoria
victoria,victoria,bersin,bersin,bersin,bersin,bersin,bersin,bersin,bersin,bersin
bersin,bersin,bersin,bersin,bersin,bersin,bersin,bersin,bersin,bersin,bersin,ber
in,bersin,bersin,bersin,bersin,bersin,bersin,bersin,bersin,casinogold,casinogold
casinogold,casinogold,casinogold,casinogold,casinogold,casinogold,casinogold,cas
nogold,casinogold,casinogold,casinogold,casinogold,casinogold,
    [victoria] => 1
    [bersin] => 2
    [casinogold] => 2
)
Array
(
    [imie] => jan
    [nazwisko] => nowak
    [komorka] => 455566889
    [login] => nowik
    [id] => 129
    [email] => xxx@yyy.pl
    [spolka] => victoria,bersin,casinogold,
    [victoria] => 1
    [bersin] => 1
    [casinogold] => 1
ddiceman
Masz zle dane w bazie danych a skrypt dziala poprawnie. W pierwszym rekordzie, przy jednym nazwisku masz tak dluga liste spolek i to ona jest wyswietlana

Mozesz dodac przed 10. linia:
  1. <?php
  2. $query['spolka'] = implode(',' , array_unique(explode(',', $query['spolka'])))
  3. ?>
bliitz
niestety takie rozwiązanie nie działa, powoduje że wyświetla się komunikat:

Kod
Fatal error:  Cannot use string offset as an array in C:\AppServ\www\vega\lib\ksiazka_tel_list.inc on line 44

chodzi o linijkę w której jest
  1. <?php
  2. if ( $P[ 'wycofany' ][ $baza ] == '1' )
  3. ?>


natomiast var_dump($P[ 'wycofany' ][ $baza ]) zwraca

string(1) "0"
string(1) "0"
string(1) "1"
string(1) "0"
string(1) "0"
string(1) "0"
string(1) "1"
...
string(1) "0"
skowron-line
zobacz tak:
  1. <?php
  2. $arr[ $P[ 'login' ] ][ 'spolka' ] = implode(',' , array_unique(explode(',', $baza)))
  3. ?>
ddiceman
Albo tak (linia 19):
  1. <?php
  2. if( !in_array( $baza , explode(',', $arr[ $P[ 'login' ] ][ 'spolka' ]) ) ) $arr[ $P[ 'login' ] ][ 'spolka' ] .= $baza.',';
  3. ?>
bliitz
wielki dzięki ddiceman, działa smile.gif
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.