Каков наиболее эффективный способ подсчета всех вхождений конкретного символа в строку PHP?

Каков наиболее эффективный способ подсчета всех вхождений конкретного символа в строку PHP?

использовать это:

echo substr_count("abca", "a"); // will echo 2 

Можете ли вы не кормить персонажа до preg_match_all ?

Не уверен, какой ответ вы ищете, но вот функция, которая может это сделать:

 function findChar($c, $str) { indexes = array(); for($i=0; $i<strlen($str); $i++) { if ($str{$i}==$c) $indexes[] = $i; } return $indexes; } 

Передайте его персонажу, который вы ищете, и строку, которую вы хотите посмотреть:

 $mystring = "She shells out C# code on the sea shore"; $mychar = "s"; $myindexes = $findChar($mychar, $mystring); print_r($myindexes); 

Это должно дать вам что-то вроде

 Array ( [0] => 0 [1] => 4 [2] => 9 [3] => 31 [4] => 35 ) 

или что-то…

Если вы собираетесь многократно проверять одну и ту же строку, было бы разумно иметь какой-то трюк или даже ассоциативный массив, иначе простой способ сделать это …

 for($i = 0; $i < strlen($s); $i++) if($s[i] == $c) echo "{$s[i]} at position $i"; 

Это работало для меня. Пожалуйста, попробуйте код ниже:

 $strone = 'Sourabh Bhutani'; $strtwo = 'a'; echo parsestr($strone, $strtwo); function parsestr ($strone, $strtwo) { $len = 0; while ($strtwo{$len} != '') { $len++; } $nr = 0; while ($strone{$nr} != '') { if($strone{$nr} != ' ') { $data[$nr] = $strone{$nr}; } $nr++; } $newdata = $data; if($len > 1) { $newdata = array(); $j = 0; foreach($data as $val) { $str .= $val; if($j == ($len -1)) { $newdata[] = $str; $str = ''; $j = 0; } else $j++; } } $i = 0; foreach ($newdata as $val) { if($val == $strtwo) { $i++; } } return $i; } 

что-то вроде этого также работает для этого:

 $string = 'blabla'; $searchitem = 'a'; $pieces = explode("$searchitem",$string); echo count($pieces).' times ' . $searchitem . ' character(s) is/are used ';