Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z funkcją in_array(), skrypt działa, ale wypluwa błąd (?)
Speedy
post
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 (IMG:http://forum.php.pl/style_emoticons/default/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ę) (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif) .

Domyślacie się w czym tkwi problem? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
the_foe
post
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.
Go to the top of the page
+Quote Post
Speedy
post
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

Pozdrawiam.

Ten post edytował Speedy 17.04.2006, 02:41:26
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 20:33