Witam
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");
?>
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
Tablica
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.
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');
?>
No i działa prawidłowo. Sprawdziłeś że string występuje w ciągu. Co więcej oczekujesz ?
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));
?>
Może tego oczekujesz?
$liczba = "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,123,14"; $szukana = '14'; http://www.php.net/echo http://www.php.net/strpos($liczba, $szukana); // result: 30 $szukana = '1'; http://www.php.net/echo http://www.php.net/strpos($liczba, $szukana); // result: 0 $szukana = '123'; http://www.php.net/echo http://www.php.net/strpos($liczba, $szukana); // result: 36
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.
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.
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ź.
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.
<?php function counter($obj, $what) { return http://www.php.net/count(http://www.php.net/array_keys($obj, $what)); } $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); $x = ($get > 1) ? ' razy' : ' raz'; http://www.php.net/echo 'Wystepuje: ' . $get . $x; ?>
Z funkcją explode tak łatwo nie pójdzie.
Dziękuje Dublinka. :-)
Mozna tez troche dookola:
<?php $tab = http://www.php.net/array(1,2,11,3,4,5,1,6,7,8,9,11,10,11,12,13,11111); $input = 11; function counter($obj, $what) { $sum = http://www.php.net/array(); foreach($obj as $key => $val) { if($val == $what) { $sum[] = $val; } } return http://www.php.net/count($sum); } $get = counter($tab, $input); $x = ($get > 1) ? ' razy' : ' raz'; http://www.php.net/echo 'wartość: ' . $input . ' wystepuje: ' . $get . $x; ?>
<?php $tab = http://www.php.net/array(1,2,11,3,4,5,1,6,7,8,9,11,11,10,11,12,13,11111); $input = 11; function counter($obj, $what) { $sum = http://www.php.net/array(); foreach($obj as $num) { list($no) = http://www.php.net/explode(',', $num); if($no == $what) { $sum[] = $no; } } return http://www.php.net/count($sum); } $get = counter($tab, $input); $x = ($get > 1) ? ' razy' : ' raz'; http://www.php.net/echo 'wartość: ' . $input . ' wystepuje: ' . $get . $x; ?>
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)