2009-06-01 34 views
13

Cách hiệu quả nhất để đếm tất cả các lần xuất hiện của một ký tự cụ thể trong chuỗi PHP là gì?Cách hiệu quả nhất để đếm tất cả các lần xuất hiện của một ký tự cụ thể trong chuỗi PHP là gì?

+0

Bạn có nghĩa là trong một chuỗi? Và bạn có muốn tìm thấy số được trả về không? – alex

+8

câu hỏi chắc chắn là hiệu quả trong việc sử dụng các ký tự –

+0

Vâng, là Stack tràn Twitter mới? –

Trả lời

0

Bạn không thể nạp ký tự vào preg_match_all?

+1

Nó không phải là hiệu quả để sử dụng một regex chỉ để tìm một ký tự tĩnh. –

31

sử dụng này:

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

thực sự đã giúp ích rất nhiều. – ABorty

+2

cho chuỗi nhiều byte sử dụng mb_substr_count() – Murat

+0

Ngoài ra, hãy lưu ý rằng kim có chữ "phân biệt chữ hoa chữ thường"! –

0

Không chắc những loại câu trả lời bạn đang tìm kiếm, nhưng đây là một chức năng mà có thể làm điều đó:

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

Vượt qua nó trở thành nhân vật bạn tìm kiếm và chuỗi bạn muốn xem:

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

Nó sẽ cung cấp cho bạn một cái gì đó như

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

hoặc một cái gì đó ...

0

Nếu bạn đang đi để được nhiều lần kiểm tra cùng một chuỗi, nó muốn được thông minh để có một số loại Trie hoặc mảng thậm chí assoc cho nó bằng cách khác, cách đơn giản để làm điều đó là ...

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

nếu chúng ta muốn tìm kiếm phân biệt chữ hoa chữ thường thì sao? Prashant

-1

một cái gì đó như thế này cũng làm việc cho này:

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

này đang làm việc cho tôi. Vui lòng thử mã dưới đây:

$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; 
} 
Các vấn đề liên quan