Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Błąd w kodzie
HTFhere
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 4.11.2013

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


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ś? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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


Ten post edytował Kshyhoo 24.12.2013, 12:22:43
Go to the top of the page
+Quote Post
HTFhere
post
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 4.11.2013

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


Czy mógłbyś mi wytłumaczyć co robi wiersz :
  1. $ile["$linia"]++;

Jestem raczej początkujący (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
fate
post
Post #4





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

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


Nie przeraź się że nie ma tam słowa o PHP chodzi o to samo
http://pl.wikipedia.org/wiki/Inkrementacja
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 561
Pomógł: 6315
Dołączył: 27.12.2004




$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]++;
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #6





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Święta racja, dobrze że nospor czuwa (IMG:style_emoticons/default/smile.gif)
Swoją drogą, skopiowałem to kiedyś od miszcza z algorytmy.pl i tak zostało...
Go to the top of the page
+Quote Post
HTFhere
post
Post #7





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 4.11.2013

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


  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" (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #8





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Może list?

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

Wesołych Świąt...
Go to the top of the page
+Quote Post
HTFhere
post
Post #9





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 4.11.2013

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


Wzajemnie! Wszystkiego najlepszego życzę! (IMG:style_emoticons/default/smile.gif) Chciałbym sobie dać spokój, ale tak mnie ten problem pali, że chyba nie dam rady zasiąść do wigilii (IMG:style_emoticons/default/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).
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #10





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 13:01