2013-04-23 2 views
0

받기 :나는이 같은 문자열 뭔가가있는 경우 Sepecific 문자열 내부의 수 문자열

$string = '01122028K,02122028M,03122028K,04122028M,05122028K,06122028P-2,07122028K,08122028P-'; 

내가 'K'내부 문자열 $ 문자열의 번호를 위해 할 수있는 방법.이 경우 K는 4가됩니다.$ string을 배열로 분해 한 후 루핑을 통해 strpos() 도움으로 해결할 수 있습니다. 모든 PHP 함수가 직접적으로 그것을 할 수 있습니까?

감사합니다. 당신이 K-1을 계산하지 않으려면

+5

'substr_count()'함수를 사용 하시겠습니까? – Barmar

+0

[X 문자의 집계 번호] 가능한 복제본 (http://stackoverflow.com/questions/4455013/counting-number-of-x-character) – Barmar

+0

substr_count()는 '021222K', '0212332K'에서만 작동합니다. 그러나 기존의 K와 K-1을 구별 할 수는 없다. 그래서, 만약 내가 '0232323K', '0329322K-1'을 가지고 있다면 그것은 여전히 ​​2를 반환합니다. 나는 이것을 원하지 않습니다. 1 –

답변

6
echo "There are " . substr_count($string, 'K') . " K's in the string"; 

이 될 수 있습니다

echo "There are " . substr_count($string, 'K')-substr_count($string, 'K-') . " K's in the string"; 

이 코멘트에 새로운 문제를 해결하기 위해 :

$string = '01122028K,02122028M,02122028K-1,02122028K-2,03122028K,04122028M,05122028K-1,04122028M,05122028K,06122028P-2,07122028K,08122028P-'; 
preg_match_all('/K(?:-\d+)?/', $string, $match); 
$counts = array_count_values($match[0]); 
print_r($counts); 

Array 
(
    [K] => 4 
    [K-1] => 2 
    [K-2] => 1 
) 
+0

훌륭한 직업! 감사합니다. Barmar. 이것이 내가 의미하는 바입니다. :-D –

+1

처음부터 그렇게 말했어 야합니다. 사람들의 시간을 낭비하지 말고, 정말로 원했던 것보다 훨씬 간단한 질문으로 말입니다. – Barmar

0

를 또한보십시오이 솔루션을 :

$string = '01122028K,02122028M,03122028K,04122028M,05122028K,06122028P-2,07122028K,08122028P-'; 
$strlen = strlen($string); 
$count = 0; 
for($i = 0; $i <= $strlen; $i++) { 
    $char = substr($string, $i, 1); 
    // $char contains the current character, so do your processing here 
    if ($char == "K") 
     $count++: 
} 

다음. .

는 "간단한 방법"아니에요하지만 나는 그것이 유용 매우 유연하고 당신이 당신의 문자열 코드의 모든 종류를 조작 할 수 있기 때문에 발견
echo $count; 

.

행운을 빌어 요!

+1

좋은 직장. 그러나 너무 많은 코드. :-) –

+1

좋은 ...하지만 열심히 일 – TNK

+0

@ Philips 모두에게 감사드립니다. –