Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: echo substr_count
Forum PHP.pl > Forum > PHP
Zenobiusz
Witam biggrin.gif

Mam kod, który ma wyszkać znak "1". ECHO wyrzuca aż 8 jedynek a mi zależy aby wyszukał tylko "1" jako znak pojedyńczy czyli powinno ECHO wyrzucać "1". Jakieś wskazówki ?

<?php
echo substr_count("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15","1");
?>
viking
Skoro używasz funkcji która zlicza ilość wystąpień w ciągu to czego oczekujesz?
Użyj np https://www.php.net/manual/en/function.stristr.php
dublinka
Cytat(Zenobiusz @ 26.08.2019, 12:29:22 ) *
Witam biggrin.gif

Mam kod, który ma wyszkać znak "1". ECHO wyrzuca aż 8 jedynek a mi zależy aby wyszukał tylko "1" jako znak pojedyńczy czyli powinno ECHO wyrzucać "1". Jakieś wskazówki ?

<?php
echo substr_count("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15","1");
?>


to tablica czy string?
Zenobiusz
Tablica
kreatiff
Skoro to tablica (tzn. ten string 1,2,3,...,15) no to użyj https://www.php.net/manual/en/function.arra...ount-values.php
A jeśli to jednak string, to przed powyższą funkcją przekształć tego stringa na tablicę za pomocą explode() używając przecinka jako separatora.
Zenobiusz
stristr to raczej nie jest dobry pomysł. To nie jest to czego oczekuje.

Tu podaje przykład:

<?php
$liczba = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15";
echo stristr($liczba, '14');
?>
viking
No i działa prawidłowo. Sprawdziłeś że string występuje w ciągu. Co więcej oczekujesz ?
Zenobiusz
Z tablicy zbyt dosłownie wyciąga wszystkie cyfry a mi nie o to chodzi. Jeżeli poproszę aby z tablicy wyliczono ile jest 1 przy ciągu liczb 1,2,3,4,5,10,11 to echo pokaże że są 4 jedynki, a ma pokazać że 1 bo faktycznie jest tylko jedna jedynka jako liczba. Z funkcją ARRAY jest już inaczej i to właśnie tutaj jest rozwiązanie.

<?php
$array = array(1, 31, 11, 42, 2);
print_r(array_count_values($array));
?>
Tomplus
Może tego oczekujesz?
  1. $liczba = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,123,14";
  2. $szukana = '14';
  3. echo strpos($liczba, $szukana); // result: 30
  4. $szukana = '1';
  5. echo strpos($liczba, $szukana); // result: 0
  6. $szukana = '123';
  7. echo strpos($liczba, $szukana); // result: 36


viking
Z pierwszego postu wynika że chcesz sprawdzić czy występuje chociaż raz. Tym sposobem to sprawdzisz. Liczbę masz bo po niej szukasz. Czy występuje sprawdza funkcja. Dlatego nie rozumiem problemu.
Zenobiusz
strpos pokazuje pozycje znaku w ciągu. Z Twojego ciągu jeżeli zapytam się o liczbę 14 to z mojego oczekiwania powinno się pojawić że 14 są dwie. :-)

Viking.
No własnie w tym problem że jeżeli się zapytam o np 14 jw. w ciągu to nie pokazuje że są dwie liczby 14 tylko wyliczy wszystkie czwórki i jedynki.
viking
Definicja funkcji jest jasna: Returns all of haystack starting from and including the first occurrence of needle to the end.
Twoje pytanie: Mam kod, który ma wyszkać znak "1".
Jakie pytanie taka odpowiedź.
Tomplus
Już nie mówiąc, że nie informujesz nas czy dane wejściowe są standaryzowane, bo może lepiej pobawić się funkcją explode() i funkcjami do szukania elementów tablicy.
dublinka
Cytat(Zenobiusz @ 26.08.2019, 12:29:22 ) *
Witam biggrin.gif

Mam kod, który ma wyszkać znak "1". ECHO wyrzuca aż 8 jedynek a mi zależy aby wyszukał tylko "1" jako znak pojedyńczy czyli powinno ECHO wyrzucać "1". Jakieś wskazówki ?

<?php
echo substr_count("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15","1");
?>



  1. <?php
  2. function counter($obj, $what)
  3. {
  4. return count(array_keys($obj, $what));
  5. }
  6. $get = counter(array(1,2,11,3,4,5,1,6,7,8,9,11,10,11,12,13,11111), 11);
  7.  
  8. $x = ($get > 1) ? ' razy' : ' raz';
  9. echo 'Wystepuje: ' . $get . $x;
  10. ?>
Zenobiusz
Z funkcją explode tak łatwo nie pójdzie.

Dziękuje Dublinka. :-)
dublinka
Mozna tez troche dookola:

  1. <?php
  2.  
  3. $tab = array(1,2,11,3,4,5,1,6,7,8,9,11,10,11,12,13,11111);
  4. $input = 11;
  5.  
  6. function counter($obj, $what)
  7. {
  8. $sum = array();
  9.  
  10. foreach($obj as $key => $val)
  11. {
  12. if($val == $what)
  13. {
  14. $sum[] = $val;
  15. }
  16. }
  17.  
  18. return count($sum);
  19.  
  20. }
  21. $get = counter($tab, $input);
  22.  
  23. $x = ($get > 1) ? ' razy' : ' raz';
  24. echo 'wartość: ' . $input . ' wystepuje: ' . $get . $x;
  25.  
  26.  
  27. ?>


I wersja z explode:)


  1. <?php
  2.  
  3. $tab = array(1,2,11,3,4,5,1,6,7,8,9,11,11,10,11,12,13,11111);
  4. $input = 11;
  5.  
  6. function counter($obj, $what)
  7. {
  8. $sum = array();
  9.  
  10. foreach($obj as $num)
  11. {
  12.  
  13. list($no) = explode(',', $num);
  14.  
  15. if($no == $what)
  16.  
  17. {
  18.  
  19. $sum[] = $no;
  20.  
  21. }
  22.  
  23. }
  24.  
  25. return count($sum);
  26.  
  27. }
  28. $get = counter($tab, $input);
  29.  
  30. $x = ($get > 1) ? ' razy' : ' raz';
  31. echo 'wartość: ' . $input . ' wystepuje: ' . $get . $x;
  32.  
  33.  
  34. ?>


Oczywiscie te dwa przyklady sa bardzo pobobne bo w drugim zamiast uzyc pobrania od razu w petli => $value bawimy sie list-em i explode.
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.