Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> echo substr_count
Zenobiusz
post 26.08.2019, 12:29:22
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 17.05.2019

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


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");
?>
Go to the top of the page
+Quote Post
viking
post 26.08.2019, 13:31:53
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


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


--------------------
Go to the top of the page
+Quote Post
dublinka
post 26.08.2019, 19:35:22
Post #3





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


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?


--------------------
Go to the top of the page
+Quote Post
Zenobiusz
post 27.08.2019, 07:48:17
Post #4





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 17.05.2019

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


Tablica
Go to the top of the page
+Quote Post
kreatiff
post 27.08.2019, 08:52:24
Post #5





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


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.
Go to the top of the page
+Quote Post
Zenobiusz
post 27.08.2019, 09:57:28
Post #6





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 17.05.2019

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


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

Ten post edytował Zenobiusz 27.08.2019, 09:58:20
Go to the top of the page
+Quote Post
viking
post 27.08.2019, 11:22:54
Post #7





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


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


--------------------
Go to the top of the page
+Quote Post
Zenobiusz
post 27.08.2019, 12:10:46
Post #8





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 17.05.2019

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


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

Ten post edytował Zenobiusz 27.08.2019, 12:14:42
Go to the top of the page
+Quote Post
Tomplus
post 27.08.2019, 12:25:54
Post #9





Grupa: Zarejestrowani
Postów: 1 834
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


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


Go to the top of the page
+Quote Post
viking
post 27.08.2019, 12:33:26
Post #10





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


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.


--------------------
Go to the top of the page
+Quote Post
Zenobiusz
post 27.08.2019, 12:36:10
Post #11





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 17.05.2019

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


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.

Ten post edytował Zenobiusz 27.08.2019, 12:39:28
Go to the top of the page
+Quote Post
viking
post 27.08.2019, 13:21:34
Post #12





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


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


--------------------
Go to the top of the page
+Quote Post
Tomplus
post 27.08.2019, 13:43:20
Post #13





Grupa: Zarejestrowani
Postów: 1 834
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


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.
Go to the top of the page
+Quote Post
dublinka
post 28.08.2019, 08:22:11
Post #14





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


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


Ten post edytował dublinka 28.08.2019, 08:34:09


--------------------
Go to the top of the page
+Quote Post
Zenobiusz
post 28.08.2019, 10:00:21
Post #15





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 17.05.2019

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


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

Dziękuje Dublinka. :-)

Ten post edytował Zenobiusz 28.08.2019, 11:39:06
Go to the top of the page
+Quote Post
dublinka
post 28.08.2019, 13:52:53
Post #16





Grupa: Zarejestrowani
Postów: 594
Pomógł: 66
Dołączył: 22.02.2008
Skąd: Dublin

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


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.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 04:24