Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Błąd w kodzie
Forum PHP.pl > Forum > Przedszkole
HTFhere
Witam. Chcę napisać kod, który będzie wczytywał string zawierający imiona oddzielone przecinkiem z pliku, a następnie jeśli jakieś imie będzie się powtarzało, to aby dopisywał na końcu kolejnych powtórzonych imion cyfrę w nawiasach( np jeśli bedzie 4 Szymonów, to pierwszy niech zostanie jak jest, drugi niech będzie Szymon(1), trzeci Szymon(2) itd.). Wystukałem taki kod
  1. $plik = 'imiona.txt';
  2. $uchwyt = fopen($plik, 'r');
  3. $zawartosc = fread($uchwyt, (filesize($plik)-1));
  4. fclose($uchwyt);
  5. $imiona = explode(",", $zawartosc);
  6. $a=count($imiona);
  7. for($b=0;$b<($a-1);$b++){
  8. $d = 1;
  9. for($c=0;$c<($a-1);$c++) {
  10. if($c == $b){
  11. //niech nic się nie dzieje;
  12. } elseif ($imiona[$c] === $imiona[$b]) {
  13. $imiona[$c] .= "($d)";
  14. $d++;
  15. }
  16.  
  17.  
  18. }
  19. }
  20.  

Który niestety nie działa tak jak bym chciał,dla tylko 1 powtarzającego się imienia działa prawidłowo, gdy jest więcej już nie, nie mogę znaleźć błędu w moim rozumowaniu- pomoże ktoś? smile.gif
Kshyhoo
Dlaczego nie kontynuujesz tego wątku?
Jak policzyć w tablicy powtarzające się elementy? Przykład:
  1. foreach($tab as $linia) {
  2. $ile[$linia]++;
  3. }
  4.  
  5. while(list($indeks, $wartosc) = each ($ile)) {
  6. echo "$indeks - $wartosc<br />";
  7. }
HTFhere
Czy mógłbyś mi wytłumaczyć co robi wiersz :
  1. $ile["$linia"]++;

Jestem raczej początkujący smile.gif
fate
Nie przeraź się że nie ma tam słowa o PHP chodzi o to samo
http://pl.wikipedia.org/wiki/Inkrementacja
nospor
$ile["$linia"]++;
A ja sie potem zastanawiam skad ci ludzie biora takie kwiatki "$zmienna" ale co tu sie dziwic jak na forum dostają takie odpowiedzi :/


Tak ma byc:
$ile[$linia]++;
Kshyhoo
Święta racja, dobrze że nospor czuwa smile.gif
Swoją drogą, skopiowałem to kiedyś od miszcza z algorytmy.pl i tak zostało...
HTFhere
  1. foreach($tab as $linia) {
  2. $ile[$linia]++;
  3. }
  4.  
  5. while(list($indeks, $wartosc) = each ($ile)) {
  6. echo "$indeks - $wartosc<br />";
  7. }

To jest naprawdę świetny kod! ( nie licząc tego, że wywala mi błędy "notice:undefined variable" i "undefined index" wink.gif ) ale nie chodziło mi o to konkretnie. Chciałbym tą tablicę z imionami posortować, a w momencie sortowania( używam ksort() do sortowania po imionach, bo łączę tą tablicę z tablicą z nazwiskami) jak jest kilka takich samych imion, to mi je usuwa i zostawia tylko jedno. Dlatego dla każdego kolejnego powtarzającego się imienia chciałbym dodawać numery na jego końcu. Czy ma ktoś pomysł jak to zrobić? (Chyba, że jest jakiś inny sposób na posortowanie tych imion).
pozdrawiam
Kshyhoo
Może list?

Nie programuj w święta, bug się rodzi...

Wesołych Świąt...
HTFhere
Wzajemnie! Wszystkiego najlepszego życzę! smile.gif Chciałbym sobie dać spokój, ale tak mnie ten problem pali, że chyba nie dam rady zasiąść do wigilii smile.gif nie wiem jak mógłbym posortować te imiona funkcją list :/ aha, zapomniałem dodać- nie wiadomo ile jest tych imion ( to chyba ważna informacja).
Kshyhoo
Funkcja list nie służy do sortowania. Służy do pobrania elementów tablicy.
  1. $plik = "imiona.txt";
  2. $dane = file($plik);
  3. if(!empty($dane)) {
  4. foreach($dane as $linia) {
  5. list($col1[], $col2[], $col3[], $col4[], $col5[], $col6[]) = explode('|', $linia);
  6. }
  7. // Sortujesz (tu po kolumnie nr 6):
  8. asort($col6);
  9. }

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.