![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 8.11.2003 Skąd: z domu... Ostrzeżenie: (0%) ![]() ![]() |
Posiadam dwa pliki arts_cat.txt i plik arts.txt. Chciałbym wyświetlić
zawartość pierwszego pliku i odpowiednio policzyć dla niego stringi z drugiego pliku. Wygląda to tak: Pierwszy: dzial||nazwa||opis|| Plik arts_cat.txt: 1||Ogólny||Opis 1.|| 2||Wydarzenia||Opis 2.|| 3||Imprezy||Opis 3.|| Drugi: kto||Tytul||Tresc artu||data||dzial|| Plik arts.txt: joshua||test||oto test||10.01.2006||1|| si6||test2||oto test2||14.01.2006||3|| kozi||test3||oto test3||12.01.2006||2|| joshua||testxx||oto testxx||13.01.2006||1|| jareq||tescior||oto gut test||11.11.2006||1|| Kod który wyświetla działy: [php:1:41112f028e] for($i=0;$i<$art_cat_file_c;$i++){ $string = explode("||", $art_cat_file[$i]); echo "ID: $string[0] // Nazwa: $string[1] // Opis: $string[2] //"; } [/php:1:41112f028e] I wszystko ok. Ale np. chciałbym wyswietlić ilość artów w dziale: Np. ID: 1 // Nazwa: Ogólny // Opis: Opis 1. // Ilość: 3 Ilość ta sumowana by była z pliku arts.txt(string 4). Mam coś takiego, ale to jest źle: [php:1:41112f028e] $art_cat = "arts_cat.txt"; $art_cat_file = file($art_cat); $art_cat_file_c = count($art_cat_file); $arts = "arts.txt"; $arts_file = file($arts); $arts_file_c = count($arts_file); for($i=0;$i<$art_cat_file_c;$i++){ $split = explode("||", $art_cat_file[$i]); for($in=0;$in<$arts_file_c;$in++){ $lite = explode("||", $arts_file[$in]); if($lite[6] == $split[0]){ $count++; } else { $count = 0; } } echo "ID: $split[0] // Nazwa: $split[1] // Opis: $split[2]. // Ilość: $count"; } [/php:1:41112f028e] Wyświetla mi wszystko dobrze(tylko 1 dział dobrze podlicza), lecz następne działy zawsze mają wartość $count równą 1. Co jest? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 2 Dołączył: 25.08.2003 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
[php:1:099b46c020]<?php
$file=fopen("plik.txt", "r"); $fread=fread($file,filesize("plik.txt")); $ex[0]=explode("n",$fred); for($i=0;$i<count($ex[0]);$i++) { $ex[1]=explode("||",$ex[0][$i]); print "linia [".$i."] ilosc explodowanych... z linijki to [".count($ex[1][$i])."]<br>"; } print "wszystkich linijek to... ".count($ex[0])."<br>"; ?>[/php:1:099b46c020] cos takiego? -------------------- textmate @mac trance / buraki |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 8.11.2003 Skąd: z domu... Ostrzeżenie: (0%) ![]() ![]() |
Niestety, nie o to mi chodziło. Chodzi mi o to, aby podliczyć ilość powtarzających się działów, a następnie przyporządkować je do drugiego skryptu wyświetlającego działy.
ID: 1 // Nazwa: Ogólny // Opis: Opis 1. // Ilość: 3 "Ilość:" pobierana by była z pliku arts.txt, przez skrypt który podliczałby arty z tego działu, tu: joshua||test||oto test||10.01.2006||1|| joshua||testxx||oto testxx||13.01.2006||1|| jareq||tescior||oto gut test||11.11.2006||1|| W sumie trzy(3). |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
[php:1:a7817c932f]<?php
$plik = file("arts.txt"); $tab = array(); foreach ($plik as $val) { list(,,,,$id) = explode("||", $val); $tab[] = $id; } $ilosci = array_count_values($tab); $cats = file("cats.txt"); foreach ($cats as $val) { list($id, $nazwa, $opis) = explode("||", $val); echo "ID: ". $id ." // Nazwa: ". $nazwa ." // Opis: ". $opis ." // Ilo¶ć: ". $ilosci[$id]. "<br />"; } ?>[/php:1:a7817c932f] -------------------- Brak czasu :/
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 34 Pomógł: 0 Dołączył: 8.11.2003 Skąd: z domu... Ostrzeżenie: (0%) ![]() ![]() |
Oto ostateczny kod, może się komuś przyda:
[php:1:080031a910] $arts = file("arty.txt"); $arts_c = count($arts_file); $art_cat = file("catalogi.txt"); $art_cat_c = count($art_cat_file); $tab = array(); for($c=0;$c<$arts_c;$c++){ $split_c = explode("||", $arts[$c]); $tab[] = $split_c[6]; } $ilosci = array_count_values($tab); for($b=0;$b<$art_cat_c;$b++){ $split_b = explode("||", $art_cat[$b]); if($ilosci[$split_b[0]] == ""){ $ilosci[$split_b[0]] = "0"; } echo "ID: ". $split_b[0] ." // Nazwa: ". $split_b[1] ." // Opis: ". $split_b[2] ." // Ilość: ". $ilosci[$split_b[0]]. "<br>"; } [/php:1:080031a910] I dodatkowe pytanie, co jest bardziej ekonomiczne(w przypadku sprawdzania pliku, linia po linni) funkcja foreach, czy for? Oczywiście wszystko działa, więc punkt dla FiDo, thx. |
|
|
![]()
Post
#6
|
|
![]() Administrator planeta/IRC Grupa: Przyjaciele php.pl Postów: 385 Pomógł: 0 Dołączył: 19.04.2003 Skąd: Zabrze Ostrzeżenie: (0%) ![]() ![]() |
Cytat I dodatkowe pytanie, co jest bardziej ekonomiczne(w przypadku sprawdzania pliku, linia po linni) funkcja foreach, czy for?
Dla tablic asocjacyjnych szybsze będzie foreach. Natomiast przy zwykłych tablicach for powinno mieć przewage (nie interesuje sie tablicą, tylko generuje kolejne liczby, które wykorzystamy jako klucze do naszej tablicy). -------------------- "Programmers are in a race with the Universe to create bigger and better idiot-proof programs, while the Universe is trying to create bigger and better idiots. So far the Universe is winning."
Cudi's devBlog |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 16:09 |