Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] tablice-jak dodać elementy?
neverever
post
Post #1





Grupa: Zarejestrowani
Postów: 278
Pomógł: 44
Dołączył: 17.02.2004
Skąd: Wieliczka

Ostrzeżenie: (10%)
X----


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ą?

Ten post edytował neverever 10.09.2007, 18:53:59


--------------------
neverever
Go to the top of the page
+Quote Post
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




  1. <?php
  2. $tab['element1'] = 1;
  3. $tab['element2'] = 1;
  4. $tab['element3'] = 1;
  5. ?>
Go to the top of the page
+Quote Post
neverever
post
Post #3





Grupa: Zarejestrowani
Postów: 278
Pomógł: 44
Dołączył: 17.02.2004
Skąd: Wieliczka

Ostrzeżenie: (10%)
X----


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ć?

Ten post edytował neverever 10.09.2007, 18:52:14


--------------------
neverever
Go to the top of the page
+Quote Post
tehn
post
Post #4





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 8.09.2007

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


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

Ten post edytował tehn 10.09.2007, 19:12:56


--------------------
sidzina
Go to the top of the page
+Quote Post
neverever
post
Post #5





Grupa: Zarejestrowani
Postów: 278
Pomógł: 44
Dołączył: 17.02.2004
Skąd: Wieliczka

Ostrzeżenie: (10%)
X----


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!

Ten post edytował neverever 10.09.2007, 20:36:14


--------------------
neverever
Go to the top of the page
+Quote Post
tehn
post
Post #6





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 8.09.2007

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


poczytaj w manualu o funkcji mb_convert_encoding i ustaw kodowanie textu i pliku na takie same...


--------------------
sidzina
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 Aktualny czas: 20.08.2025 - 05:05