شمارش تعداد کاراکترهای یک رشته در پی اچ پی با استفاده از تابع count_chars
تابع count_chars اطلاعاتی در مورد کاراکترهای استفاده شده در یک رشته را برمیگرداند و به صورت زیر در پی اچ پی تعریف شده است.
count_chars ( string $string [, int $mode = 0 ] ) : mixed
تعداد کاراکترها اتفاق افتاده در تابع را می شمارد.
ورودیهای تابع count_chars
string:رشتهای که قرار توسط تابع ارزیابی بشه
mode:حالت خروجی تابع را مشخص میکنه
خروجیهای تابع count_chars
نسبت به دومین پارامتر یکی از خروجیهای زیر را برمیگرداند.
- اگه دومین پارامتر این تابع ۰ باشه تابع یک آرایه برمیگردونه که شامل تمام کاراکترهای تک بایتی و تعداد استفادهی آنها در رشتهی وردوی است کلید های این آرایه از نوع byte-value هستند و تمام اعداد ۰ تا ۲۵۵ را شامل میشه که هر کلید معرف اسکی کد یک کاراکتر تک بایتی و مقدار ذخیره شده در کلید متناظر نشان دهندهی تعداد تکرار کاراکتر مورد نظر در رشته ی ورودی است.(در این مورد تمام کاراکترهای تک بایتی اعم از استفاده شده و استفاده نشده در رشته در آرایهی خروجی لیست شده است)
- اگه دومین پارامتر این تابع ۱ باشه تابع یک آرایه برمیگردونه که شامل تمام کاراکترها استفاده شده و تعداد تکرار هر کاراکتر است. کلیدهای این آرایه از نوع byte-value هستند و معرف کد اسکی کاراکتر مورد نظر و مقدار ذخیره شده تعداد تکرار کاراکتر متناظر در رشتهی ورودی است.(در این مورد فقط کاراکترهای استفاده شده در رشتهی ورودی در آرایهی خروجی لیست شده است)
- اگه دومین پارامتر این تابع ۲ باشه تابع یک آرایه برمیگردونه که شامل تمام کاراکترهای استفاده نشده در رشته ورودی است و کلیدهای ای آرایه از نوع byte-value هستند که معرف کد اسکی یک کاراکتر تک بایتی است و مقدار هر عضو آرایه معرف تعداد تکرار (در این مورد صفر برای تمام اعضای آرایه خروجی) کاراکتر متناظر است.
- اگه دومین پارامتر تابع ۳ باشه تابع یک رشته برمیگردونه که شامل تمام کاراکترهایی است که فقط یک بار در رشتهی ورودی (اولین پارامتر تابع) استفاده شده است.
- اگه دومین پارامتر این تابع ۴ باشه تابع یک رشته برمیگردونه که شامل تمام کاراکترهای استفاده نشده در اولین پارمتر این تابع است.
مثل همیشه یک مثال از فراخوانی تابع میتونه در درک کارکرد تابع مفید باشه
<?php
$data = "Two Ts and one F.";
foreach (count_chars($data, 1) as $i => $val) {
echo "There were $val instance(s) of \"" , chr($i) , "\" in the string.\n";
}
//output:
There were 4 instance(s) of " " in the string.
There were 1 instance(s) of "." in the string.
There were 1 instance(s) of "F" in the string.
There were 2 instance(s) of "T" in the string.
There were 1 instance(s) of "a" in the string.
There were 1 instance(s) of "d" in the string.
There were 1 instance(s) of "e" in the string.
There were 2 instance(s) of "n" in the string.
There were 2 instance(s) of "o" in the string.
There were 1 instance(s) of "s" in the string.
There were 1 instance(s) of "w" in the string.
?>
این تابع فقط برای رشتههایی که از کاراکترهای تک بایتی تشکیل شده اند کاربرد داره برای استفاده در رشتههای بیش از یک بایت مثل رشتههای فارسی میتونید از تابع mb_count_char که در وب سایت php.net یکی از کاربرها تعریف کرده استفاده کنید.
<?php
function mb_count_chars($input) {
$l = mb_strlen($input, 'UTF-8');
$unique = array();
for($i = 0; $i < $l; $i++) {
$char = mb_substr($input, $i, 1, 'UTF-8');
if(!array_key_exists($char, $unique))
$unique[$char] = 0;
$unique[$char]++;
}
return $unique;
}
$input = "سلام دنیا";
echo "<pre>";
print_r( mb_count_chars($input) );
echo "</pre>";
//output:
Array
(
[س] => ۱
[ل] => ۱
[ا] => ۲
[م] => ۱
[ ] => ۱
[د] => ۱
[ن] => ۱
[ی] => ۱
)
?>