Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z funkcją in_array(), skrypt działa, ale wypluwa błąd (?)
Speedy
post 16.04.2006, 23:19:40
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


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.


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post
the_foe
post 17.04.2006, 01:11:04
Post #2





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 26.08.2003

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


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.


--------------------
..::tHe FoE::..
Go to the top of the page
+Quote Post
Speedy
post 17.04.2006, 02:36:08
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


Racja, dzięki - poprawiłem i zmieniłem na for - teraz jest wszystko w porządku smile.gif.

Pozdrawiam.

Ten post edytował Speedy 17.04.2006, 02:41:26


--------------------
Sygnatura niezgodna z regulaminem.
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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 20:00