Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] zliczanie rekordów o tej samej wartości
Forum PHP.pl > Forum > Przedszkole
shpaque
Witam serdecznie, mam taki kodzik:

  1. <?
  2. $ips = array();
  3. $datas = array();
  4. $tytuls = array();
  5. $miejsces = array();
  6. $miastos = array();
  7. $ulicas = array();
  8. $folders = array();
  9. $database = "./db/conferences/conf_$spc.db";
  10. $items = file($database);
  11. $last = count($items);
  12.  
  13. for ($i = $last - 1; $i >= 0; $i--)
  14. {
  15. list($ip, $data, $tytul, $miejsce, $miasto, $ulica, $folder) = explode('|', $items[$i]);
  16. $tytuls[$i] = $tytul;
  17.  
  18. echo "<tr>\n";
  19. echo "<td><a class='actuals' href=./news.php?date=$datas[$i]&news=".str_replace(' ', '+', $tytuls[$i]).">$tytuls[$i]</a></td>\n";
  20. echo "</td>\n";
  21. echo "</tr>\n";
  22. }
  23. ?>


i teraz o co mi chodzi:
- w pliku istnieje zmienna $tytul - chciałbym, żeby skrypt policzył mi ile jest linni / wpisów o tych samych tytułach (analogicznie, mam w pliku bazę mężczyzn i kobiet i chcialbym zeby skrypt policzył mi ile jest kobie t i ile mężczyzn - ale o tyle trudniej, że np nie wiem jakim znaczkiem są określone płci)
- zeby wyswieylil mi tylko tytuly (np mam 13 wpisow o jednym tytule, 10 o drugim i zeby mi wyswietlil np jeden tytul i w nawiasie ile jest wpisow i drugi i w nawiasie...)


dzięki za pomoc z gory
SmokAnalog
Poczytaj sobie o funkcji array_count_values.
shpaque
ok byloby fajnie i nie byloby problemu, gdybym ustalil na pocztku jaka wartosc ma byc zliczana - a kiedy wartosc jest nieznana? Opiszę konkretnie o co chodzi - mam plik z konferencjami np jeden tytul konferencji powtarza sie 13 razy bo jest w 13 terminach w 13 miastach prowadzony, inny 10 razy pod innym tytulem. A chce wyswietlić wartosci pliku w postaci: Tytuł konferencji 1 (13), Tytuł konferencji 2 (10) a nie z powtorzeniami - a przeciez nie mam pojecia jaki tytul bedzie miala kolejna dodana konferencja...
SmokAnalog
Tak właśnie działa ta funkcja, nie przekazujesz jej żadnych wartości poza tablicą. Ona sama zbiera je do kupy i zlicza liczbę wystąpień.
shpaque
tak ale w przykladzie np widze cos takiego:

  1. $array = array("Kyle","Ben","Sue","Phil","Ben","Mary","Sue","Ben");
  2. $counts = array_count_values($array);
  3. echo $counts['Ben'];


i wszystko jest super do momentu "echo"wania bo tam wywołana jest znów konkretna wartość...

ale generalizując robię tak?

  1. <?
  2. $ips = array();
  3. $datas = array();
  4. $tytuls = array();
  5. $miejsces = array();
  6. $miastos = array();
  7. $ulicas = array();
  8. $folders = array();
  9. $database = "./db/conferences/conf_$spc.db";
  10. $items = file($database);
  11. $last = count($items);
  12.  
  13. for ($i = $last - 1; $i >= 0; $i--)
  14. {
  15. list($ip, $data, $tytul, $miejsce, $miasto, $ulica, $folder) = explode('|', $items[$i]);
  16. $tytuls[$i] = $tytul;
  17. }
  18.  
  19. $array = array($tytuls[$i]);
  20. ?>
SmokAnalog
Wyświetlenie tego to już są podstawowe operacje na tablicach asocjacyjnych, na przykład:
  1. foreach ($counts as $key => $value) {
  2. echo $key . ': (' . $value . ')<br>';
  3. }
shpaque
wyswietlanie to wyswietlanie, na razie nic nie liczy...
SmokAnalog
Niestety nie jestem wróżką i nie wiem co robisz źle. Napisz jak są zapisane dane w tym pliku i jaki dokładnie chcesz efekt.
shpaque
no dane są napisane dokładnie tak:
  1. list($ip, $data, $tytul, $miejsce, $miasto, $ulica, $folder)


czyli konkretnie tak:
  1. 192.168.2.1|2015-01-14|Nowoczesne metody zapobiegania i leczenia cukrzycy|Hotel Lord|Warszawa|Al. Krakowska 218|nmzilc


i tak jak pisałem wyżej wpisów o tym tytule jest np 13, a chcę zrobić tabelkę, gdzie wyświetli mi tytuły (bez powtórzeń) i ew w nawiasie liczbę spotkań - miejsc...
SmokAnalog
To zmienia postać rzeczy. To może coś takiego:
  1. $counts = array();
  2. foreach ($items as $item) {
  3. list($ip, $data, $tytul, $miejsce, $miasto, $ulica, $folder) = explode('|', $item);
  4. if (isset($counts[$tytul]) {
  5. $counts[$tytul]++;
  6. } else {
  7. $counts[$tytul] = 1;
  8. }
  9. }
  10. var_dump($counts);
shpaque
jest jakis blad - ale nie pokazuje mi w walidatorze - po prostu [podstrona nie startuje)
SmokAnalog
Pokaż cały kod.
shpaque
  1. <?
  2. $ips = array();
  3. $datas = array();
  4. $tytuls = array();
  5. $miejsces = array();
  6. $miastos = array();
  7. $ulicas = array();
  8. $folders = array();
  9. $database = "./db/conferences/conf_$spc.db";
  10. $items = file($database);
  11. $last = count($items);
  12.  
  13. $counts = array();
  14. foreach ($items as $item)
  15. {
  16. list($ip, $data, $tytul, $miejsce, $miasto, $ulica, $folder) = explode('|', $item);
  17. if (isset($counts[$tytul])
  18. {
  19. $counts[$tytul]++;
  20. }
  21. else
  22. {
  23. $counts[$tytul] = 1;
  24. }
  25. }
  26. var_dump($counts);
  27. ?>


dobra nie było drugiego nawiasu zamykającego if...


i wyswietlil mi cos takiego: array(2) { ["Nowoczesne metody zapobiegania i leczenia cukrzycy"]=> int(16) ["Jakiś wpis"]=> int(1) }
a po co mi to? jak ja chce w formie:

"Nowoczesne metody zapobiegania i leczenia cukrzycy (16)
Jakiś wpis (1)"

...poza tym jeszcze trzeba to podlinkować, żeby np pierwszy wpis o tym dluzszym tytule linkowal do "./conferences/$spc/$folder (czyli nazwa folderu, która jak i tytul powtarza sie 16 razy)
SmokAnalog
var_dump pokazał Ci strukturę tablicy, dalej już sobie poradź.
shpaque
no właśnie dalej nie mogę sobie poradzić...
johny_s
to wrzuć do działu zleceń
shpaque
ale nie zlecam, po prostu potrzebuję pomocy - chyba ze za 10 zl chcesz napisac te 2 linijki...

i teraz po tym wszystkim mam czegoś takieg oszukac?

  1. $tab = array($counts);
  2. foreach ($tab as $klucz => $wartosc){
  3. echo $klucz;}
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.