Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ echo substr_count

Napisany przez: 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");
?>

Napisany przez: viking 26.08.2019, 13:31:53

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

Napisany przez: dublinka 26.08.2019, 19:35:22

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?

Napisany przez: Zenobiusz 27.08.2019, 07:48:17

Tablica

Napisany przez: kreatiff 27.08.2019, 08:52:24

Skoro to tablica (tzn. ten string 1,2,3,...,15) no to użyj https://www.php.net/manual/en/function.array-count-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.

Napisany przez: Zenobiusz 27.08.2019, 09:57:28

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');
?>

Napisany przez: viking 27.08.2019, 11:22:54

No i działa prawidłowo. Sprawdziłeś że string występuje w ciągu. Co więcej oczekujesz ?

Napisany przez: Zenobiusz 27.08.2019, 12:10:46

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));
?>

Napisany przez: Tomplus 27.08.2019, 12:25:54

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. http://www.php.net/echo http://www.php.net/strpos($liczba, $szukana); // result: 30
  4. $szukana = '1';
  5. http://www.php.net/echo http://www.php.net/strpos($liczba, $szukana); // result: 0
  6. $szukana = '123';
  7. http://www.php.net/echo http://www.php.net/strpos($liczba, $szukana); // result: 36



Napisany przez: viking 27.08.2019, 12:33:26

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.

Napisany przez: Zenobiusz 27.08.2019, 12:36:10

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.

Napisany przez: viking 27.08.2019, 13:21:34

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

Napisany przez: Tomplus 27.08.2019, 13:43:20

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.

Napisany przez: dublinka 28.08.2019, 08:22:11

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 http://www.php.net/count(http://www.php.net/array_keys($obj, $what));
  5. }
  6. $get = counter(http://www.php.net/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. http://www.php.net/echo 'Wystepuje: ' . $get . $x;
  10. ?>

Napisany przez: Zenobiusz 28.08.2019, 10:00:21

Z funkcją explode tak łatwo nie pójdzie.

Dziękuje Dublinka. :-)

Napisany przez: dublinka 28.08.2019, 13:52:53

Mozna tez troche dookola:

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


I wersja z explode:)


  1. <?php
  2.  
  3. $tab = http://www.php.net/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 = http://www.php.net/array();
  9.  
  10. foreach($obj as $num)
  11. {
  12.  
  13. list($no) = http://www.php.net/explode(',', $num);
  14.  
  15. if($no == $what)
  16.  
  17. {
  18.  
  19. $sum[] = $no;
  20.  
  21. }
  22.  
  23. }
  24.  
  25. return http://www.php.net/count($sum);
  26.  
  27. }
  28. $get = counter($tab, $input);
  29.  
  30. $x = ($get > 1) ? ' razy' : ' raz';
  31. http://www.php.net/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.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)