Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Zła ilosc elementow w tablicy
Forum PHP.pl > Forum > PHP
jawka7
Witam,

Mam utworzona tablice wielowymiarowa która ma rozmiar tab[6][12] tak 6 elementów każdy z nich zawiera tablice z 12 elementami;.
Tablica jest wypełniona prawidłowo dokładnie zawiera 72 elementy, gdy drukuje count($tab) wyświetla mi zamiast 6 to 7 co jest bardzo dziwne gdyż 7 element nie został wcale utworzony. gdy wyświetlam count() rekurencyjnie powinno wyświetlić 78 a wyświetla 80. Więc postanowiłem sprawdzić ile elementów ma każda z tablic:

  1. count($tab[0) wyswietla 12
  2. count($tab[1]) wyswietla 12
  3. count($tab[2]) wyswietla 12
  4. count($tab[3]) wyswietla 12
  5. count($tab[4]) wyswietla 12
  6. count($tab[5]) wyswietla 12
  7. count($tab[6]) wyswietla 1 -> tu o dziwo wyswietla ze jest jakis element


Więc postanowiłem ten element wyświetlic tak:

  1. print $tab[6][0]; //otrzymuje w tym momencie bład


Jaka może być tego przyczyna?
Dodam ze gdy dodaje elementy do tablicy to pętla dodająca wykonuje się dokładnie 72 razy czyli 6*12=71 elementy w tablicy:

ponizej kod programu:

  1. function LoadImages($k)
  2. {
  3. $dir = "./img/gallery/";
  4. $tab = array();
  5. $n = 0;
  6.  
  7. if(is_dir($dir))
  8. {
  9. if($dh = opendir($dir))
  10. {
  11. while (($file = readdir($dh)) !== false)
  12. {
  13. if(substr($file, -3) == "JPG" ||
  14. substr($file, -4) == "JPEG" ||
  15. substr($file, -3) == "jpg" ||
  16. substr($file, -4) == "jpeg" ||
  17. substr($file, -3) == "PNG" ||
  18. substr($file, -3) == "png")
  19. {
  20. $tab[$n] = $file;
  21. $n++;
  22. }
  23. }
  24.  
  25. closedir($dh);
  26. }
  27. }
  28.  
  29. if($n%$k == 0)
  30. {
  31. $nSite = round($n/$k);
  32. }
  33. else
  34. {
  35. $nSite = round($n/$k) + 1;
  36. }
  37.  
  38. $tabImg[$nSite][$k] = array();
  39. $s = 0;
  40.  
  41. for($i = 0; $i < $nSite; $i++)
  42. {
  43. for($j = 0; $j < $k; $j++)
  44. {
  45. if($s < $n) //$n wynosi dokładnie 64 pozostałe a w pozostałe 8 mementów wypełnia pusta wartością
  46. {
  47. $tabImg[$i][$j] = $tab[$s];
  48. }
  49. else
  50. {
  51. $tabImg[$i][$j] = "";
  52. }
  53.  
  54. $s++;
  55. }
  56. }
  57.  
  58. return $tabImg;
  59. }
  60.  
  61.  
  62.  
  63. $k = 12; // liczba podzielna przez 3, ponieważ są 3 kolumny na stronie
  64.  
  65. $tabSite = LoadImages($k);
  66.  
  67. print count($tabSite)."<br />"; //czemu wyswietla 7 a nie 6
  68. print count($tabSite[6])."<br />"; // wyswietla ze jest jeden element
  69. print $tabSite[6][0]."<br />"; //blad
  70.  
  71. for($i = 0; $i < count($tabSite); $i++)
  72. {
  73. print "(".$i.") - ";
  74.  
  75. for($j = 0; $j < count($tabSite[$i]); $j++)
  76. {
  77. print $tabSite[$i][$j]." - ";
  78. }
  79.  
  80. print "<br /><br />";
  81. }
  82.  



P.S sizeof() także wyświetla 7 zamiast 6, i w czym problem?
foxbond
Jeśli masz:
Cytat
Mam utworzona tablice wielowymiarowa która ma rozmiar tab[6][12] tak 6 elementów każdy z nich zawiera tablice z 12 elementami;.


  1. count($tab[0) wyswietla 12
  2. count($tab[1]) wyswietla 12
  3. count($tab[2]) wyswietla 12
  4. count($tab[3]) wyswietla 12
  5. count($tab[4]) wyswietla 12
  6. count($tab[5]) wyswietla 12
  7. count($tab[6]) wyswietla 1 -> tu o dziwo wyswietla ze jest jakis element


To przecież masz 6 elementów, tab[6] to jest już siódmy element. Php wspiera dynamiczne tablice, dlatego zamiast błędu (wrong offset czy coś) po prostu jest tworzony kolejny element.

jawka7
Nie jest tak, znalazłem już błąd. W php nie deklaruje się tablicy statycznie z rozmiarami. Zamiast $tabImg[$nSite][$k] = array(); powinno być po prostu $tabImg = array(); ponieważ tworzyło mi przez to dodatkowo jeden pusty element na końcu.
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.