Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z funkcją in_array()
Forum PHP.pl > Forum > PHP
Speedy
Hej,

Mam funkcję, która pobiera z bazy danych rekordy z tabeli, a następnie odpowiednio je filtruje. Funkcja działa jak należy, lecz parser wypluwa mi błąd i nie wiem dlaczego blink.gif .
Funkcja jest metodą z klasy php4 i działa w sposób następujący:
Pobiera dane z tabeli z bazy danych MySQL i tworzy z nich tablicę, której przykładowa postać to:

Kod
Array
(
    [0] => Array
        (
            [projektyID] => 2
            [name] => test665
            [date] => 0000-00-00
            [userID] => 0
            [allowed_users] => Array
                (
                    [0] => 1
                    [1] => 3
                    [2] => 5
                )

            [filename] => file01
        )

    [1] => Array
        (
            [projektyID] => 3
            [name] => test666
            [date] => 0000-00-00
            [userID] => 5
            [allowed_users] => Array
                (
                    [0] => 8
                    [1] => 4
                    [2] => 3
                )

            [filename] => file02
        )

)


Dane w polu `allowed_users` w tabeli SQL są rozdzielone średnikami (są to ID użytkowników - liczby), a funkcja robi z tego tablicę (explode).
Następnie funkcja tworzy tablicę, w której znajdują się tylko te rekordy, które posiadają w zawartości elementu tablicy (który również jest tablicą) oznaczonej kluczem 'allowed_users' zdefiniowany parametr $userid. Jest to robione za pomocą funkcji in_array().

kod funkcji:
(funkcja mysql_fetch_all() tworzy wielowymiarową tablicę z rekordami na podstawie danych z tabeli)

  1. <?php
  2.  
  3. function show_all_allowed($userid)
  4. {
  5.  
  6. $sql  = 'SELECT * FROM `projekty`';
  7. $result = $this->db->mysql_fetch_all($sql);
  8. $array1 = array();
  9. $array2 = array();
  10.  
  11.  foreach($result as $v1)
  12.  {
  13.  $allowed_users = explode(';',$v1['allowed_users']);
  14.  
  15.  $array1[]  = array('projektyID'  => $v1['projektyID'],
  16. 'name'  => $v1['name'],
  17. 'date'  => $v1['date'],
  18. 'userID'  => $v1['userID'],
  19. 'allowed_users' => $allowed_users,
  20. 'filename'  => $v1['filename']
  21.  );
  22.  }
  23.  
  24.  $i = 0;
  25.  $c = count($array1);
  26.  
  27.  while($i <= $c)
  28.  {
  29.  if(in_array($userid,$array1[$i]['allowed_users']))
  30.  {
  31.  $array2[] = $array1[$i];
  32.  }
  33.  $i++;
  34.  }
  35.  
  36. if(count($array2) > 0)
  37. {
  38. return($array2);
  39. }
  40. else
  41. {
  42. return false;
  43. }
  44. }
  45.  
  46. ?>


Zaznaczam, że funkcja działa. Jedyne, co mnie intryguje to błąd jaki wypluwa. Jego komunikat jest następujący:

Kod
Warning: in_array() [function.in-array]: Wrong datatype for second argument in c:\usr\www\speedy\Projects\hcms\classes\classes\projekty.class.php on line 174


"linia 174", to miejsce, w którym znajduje się funkcja in_array(). Nie rozumiem, dlaczego tak się dzieje. Przecież podawany argument jest tablicą, więc jego typ jest poprawny. Poza tym, gdyby nie był, to funkcja by się nie wykonała (a wykonuje się) laugh.gif .

Domyślacie się w czym tkwi problem? smile.gif

Pozdrawiam.
the_foe
wychodzisz poza zakres arraya

linia 28: powinno byc tylko `<`
poza tym while sprawdza sie w petlach gdzie chcemy ja konczyc gdy zmienna osiagnie jakas zadana wartosc. W przyadku tym lepiej zastosowac petle for.
Speedy
Racja, dzięki - poprawiłem i zmieniłem na for - teraz jest wszystko w porządku smile.gif.

Pozdrawiam.
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.