شمارش تعداد کاراکترهای یک رشته در پی اچ پی با استفاده از تابع 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
(
[س] => ۱
[ل] => ۱
[ا] => ۲
[م] => ۱
[ ] => ۱
[د] => ۱
[ن] => ۱
[ی] => ۱
)
?>