Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] tablice-jak dodać elementy?
Forum PHP.pl > Forum > Przedszkole
neverever
Mam sobie na starcie pustą tablice
  1. <?php
  2. $tab=array();
  3. ?>

następnie chcę dodawać do niej kolejno elementy/klucze, kombinowałem tak:
  1. <?php
  2. array_push($tab, $element);
  3. ?>

z tym że mają one mieć przypisaną jakąś wartość np. 1:
czyli tablica ma mieć postać
  1. <?php
  2. Array ( ["element1"] => 1 ["element2"] => 1 ["element3"] => 1 ...)
  3. ?>

a ma postać
  1. <?php
  2. Array ( [0] => element1 [1] => element2 [2] => element3 ... )
  3. ?>


Czyli jak dodać klucz o zadanej nazwie i z zadaną wartością?
phpion
  1. <?php
  2. $tab['element1'] = 1;
  3. $tab['element2'] = 1;
  4. $tab['element3'] = 1;
  5. ?>
neverever
no racja

Mam więc teraz taki kod pseudo licznika słów oparty na tablicy
-zasada jest prosta, rozbija string na słowa i sprawdza je kolejno czy są w tablicy, jeśli są - zwiększa im wartość o 1 , jeśli brak - tworzy dla nich nowy klucz:
  1. <?php
  2. $tab=array();
  3. $strn='test0,test1, test2, test3,test1, test5,test4, test5 ';
  4.  
  5. preg_match_all('([A-Za-z0-9]*)', $strn, $data);
  6. foreach ($data[0] as $i) {
  7.  
  8. if($i!='') if(in_array($i,$tab)) $tab[$i]+=1;
  9. else $tab[$i]=1;
  10. }
  11. print_r ($tab);
  12. ?>


Kłopot jednak z tym, że wszędzie jest 1 -nwet tam gdzie powinno być 2. A jeśli dla nowego klucza dam =0, to w pierwszym kluczu mam 0 zamiast 1 a w pozostałych są już właściwe wartości.

Moje pytanie brzmi, jak uprościć ten kod?
-czy da się zrobić by preg_match_all nie tworzył tablicy z pustymi indeksami?
-jak zrobić żeby licznik zadział prawidłowo - klucze miały przypisane wartości odp. liczbie wystąpień danego słowa


ok, problem pustych indeksów rozwiązany-dałem:
  1. <?php
  2. preg_match_all('([0-9a-zA-Z_]+)', $strn, $data,PREG_PATTERN_ORDER);
  3. ?>

ale licznik nadal nie działa ok, bo dla wszystkich kluczy mam wartość 1 -tj jak wcześniej pisałem.

jak to zmienić?
tehn
w linijce 8 masz błąd...

powinno być

Kod
if($i!='') if(in_array($i,array_keys($tab))) $tab[$i]+=1;


funkcja in_array sprawdza po wartościach tablicy... a Ty w wartościach masz liczbę wystąpień słowa... musisz sprawdzać czy dany klucz istnieje...

mółgbyś też użyć funkcji array_key_exists()

Kod
if($i!='') if(array_key_exists($i,$tab)) $tab[$i]+=1;




a żeby preg_match_all nie tworzył tablicy z pustymi indeksami zmień * na +... powinno pomóc...
neverever
Cytat(tehn @ 10.09.2007, 20:09:25 ) *
funkcja in_array sprawdza po wartościach tablicy... a Ty w wartościach masz liczbę wystąpień słowa... musisz sprawdzać czy dany klucz istnieje...

mółgbyś też użyć funkcji array_key_exists()
faktycznie dałem array_key_exists() i jest juz wszystko wporzo, Dzięki!
tehn
poczytaj w manualu o funkcji mb_convert_encoding i ustaw kodowanie textu i pliku na takie same...
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.