Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] substr_count
Forum PHP.pl > Forum > Przedszkole
Wykrywacz
Męcze się z jedną rzeczą. Mam
  1. <?php
  2. $uploadfile = $_FILES['plik']['tmp_name'];
  3.  $name = $_FILES["plik"]["name"];
  4.  $size = $_FILES["plik"]["size"];
  5.  $type = $_FILES["plik"]["type"];
  6.  
  7. $imp = file($uploadfile);
  8. $ilosc= count($imp);
  9. echo $ilosc,'ilosc';
  10. for ($i=0; $i<$ilosc; $i++)
  11. {
  12.  $acount=substr_count($string,";");
  13. }
  14. echo $acount,'ilosc sredników';
  15. ?>


W czym problem $acount w wyniku wyświetla mi "0".

W czym to może być problem?
Xathloc
co to za zmienna $string ?
Wykrywacz
Ajć pisane z łapy i przeklejane naturalnie chodzi o
  1. <?php
  2. $acount=substr_count($imp,";");
  3. ?>
kszychu
$imp nie jest łańcuchem, tylko tablicą. Zacząłeś dobrze (tablica for) ale później zliczasz w niej cały czas to samo zqamiast liczyć średniki w kolejnych $imp[$i].
A jeśli chodzi o samego for, to lepiej użyj foreach.
Wykrywacz
No właśnie nie wsadzałem tego przez $imp[$i] ponieważ chce aby obliczyło mi średniki w całym dokumencie.
A nie umiem znaleźć jak zrobić żeby z substr_count czesał mi cały dokument:

co do pętli też mam pytanie(niezbyt do tej pory lubiliśmy się z foreach):
w manulau znalazłem 2 typy budowy foreach
  1. <?php
  2. $a_array=array("a","b","c");
  3. foreach($a_array as $key=>$value):
  4.  print $key." = ".$value."<br>";
  5. endforeach;
  6. ?>


  1. <?php
  2. foreach($i=1;$i<10;$i++):
  3.  print $i;
  4. endforeach;
  5. ?>


Problem w tym że to pierwsze niemam pojęcia jak użyć w moim skrypcie (tak lajkonicznie poprostu ... nie kumam działania)

A ten drugi wywala mi błędy w Zendzie.

Dla ścisłości bo może się to okazać miej lub bardziej istotne potrzebuje ilość numeryczną.
A swoją drogą mam pytanie dlaczego nie może być for ? - przy for dla jednego wiersza pokazuje mi prawidłowy wynik.
kszychu
Nie no, w tym drugim przykładzie to pomyliłeś składnię z for. Składnia foreach jest dwojaka:
  1. <?php
  2. foreach($tablica as $indeks => $wartosc) {
  3.  echo "Wartość dla indeksu $indeks wynosi $wartosc.<br />";
  4. }
  5. // lub uproszczona
  6. foreach($tablica as $wartosc) {
  7.  // ....
  8. }
  9. ?>
Wykrywacz
ok zrozumiałem smile.gif
Zrobiłem
  1. <?php
  2. $imp = file($uploadfile);
  3. $ilosc= count($imp);
  4. echo $ilosc,'ilosc';
  5.  
  6. foreach($imp as $wartosc) {
  7.  $acount=substr_count($wartosc,";");
  8. }
  9. echo $acount,'ilosc sredników';
  10. ?>


Tylko nadal podaje mi wartość tylko dla zerowego wiersza. A chodzi mi o sumę całkowitą ";" w całym dokumencie.
Xathloc
Zastosowanie pętli foreach w tego typu działaniu wydaje mi się cokolwiek zbędne. Skorzystałbym jednak z pętli for
  1. <?php
  2. $acount = 0;
  3. for($i=0; $i<count($imp); $i++) {$acount += substr_count($imp[$i],";");}
  4. ?>

A zliczania nie ma, bo za każdym razem tworzysz nową wartość zmiennej $acount zamiast ją sumować.
Powinno być:
  1. <?php
  2. $acount += substr_count($wartosc,";");
  3. ?>
Wykrywacz
Czy możesz proszę rozwinać dla czego zbędne?

skoro formuła jest znacznie prostsza dla foreach?

A wogóle to dziękuje za pomoc już działa smile.gif tylko jestem ciekaw czemu for
jednak było by lepsze i tak naprawdę co za różnica?
Xathloc
Pewnie jak zwykle jest to kwestia upodobań ^^
Chodziło i raczej o to, że zmiana kodu z for na foreach była zbędna, bo nie tu leżał problem smile.gif
kszychu
Oczywiście można to zrobić na wiele sposobów; za pomocą for, foreach, while, list. Jednak foreach wydaje się właśnie do tego stworzone (operuje tylko na tablicach) i ma prostą składnię.

A tak na marginesie:
  1. <?php
  2. $imp = file($uploadfile);
  3. $imp2 = implode(' ', $imp);
  4. $ilosc = substr_count($imp2,";");
  5. echo $ilosc,'ilosc';
  6. ?>
Wykrywacz
Ok rozumiem.

Mam tylko jeszcze jedno pytanie po co to?

  1. <?php
  2. $imp2 = implode(' ', $imp);
  3. ?>


counta i tak musze mieć bo potem robie if'a
  1. <?php
  2. if ($acount / 33 == $ilosc){
  3. ?>


Ale ciekaw jestem czemu takie rozwiązanie?
kszychu
implode łączy Ci całą tablicę w jeden ciąg, dzięki czemu counta robisz raz a nie dla każdego pola osobno.

A poza tym: @Wykrywacz, Ty coś ostatnio mało chyba do manuala zaglądasz. Chyba muszę Ci zadać jakąś pracę domową ;-)
Wykrywacz
Przyznaje się smile.gif nie sprawdziłem .

Ale też może dla tego że nie mieściło mi się że można to tak też rozwiązać smile.gif.
W każdym razie dzięki smile.gif
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.