جایگزینی با آرایه کال بک ها (preg_replace_callback_array)
اینجا «جایگزینی با آرایه کال بک ها» را می بینیم. «کال بک (Callback)» یعنی تابعی که موقع جایگزینی صدا زده می شود. این مثل بازی گروهی است؛ هر الگو، یک بازیکنِ متخصص دارد.
تعریف و کاربرد
preg_replace_callback_array() چند الگو را با چند کال بک جفت می کند. سپس هر تطبیق، با خروجی کال بک خودش جایگزین می شود. نتیجه رشته یا آرایه است.
نگارش و پارامترها
نگارش: preg_replace_callback_array(patterns, input, limit, count). «patterns» آرایه انجمنیِ الگو⇢کال بک است. «input» متن یا آرایه متون است. «limit» سقف جایگزینی است. «count» تعداد جایگزینی انجام شده را برمی گرداند.
مثال: شمارش حروف و ارقام
- دو کال بک برای حروف و ارقام بساز.
- الگوها را به کال بک ها نگاشت کن.
- تابع را اجرا کن و خروجی را چاپ کن.
<?php
function countLetters($matches) {
return $matches[0] . '[' . strlen($matches[0]) . 'letter]';
}
function countDigits($matches) {
return $matches[0] . '[' . strlen($matches[0]) . 'digit]';
}
$input = "There are 365 days in a year.";
$patterns = [
'/\\b[a-z]+\\b/i' => 'countLetters',
'/\\b[0-9]+\\b/' => 'countDigits'
];
$result = preg_replace_callback_array($patterns, $input);
echo $result;
?>
اثر ترتیب ارزیابی الگوها
الگوها به ترتیب اجرا می شوند. بنابراین، خروجی الگوی اول وارد ورودی الگوی بعدی می شود. این می تواند نتیجه را عوض کند.
<?php
function countLetters($matches) {
return $matches[0] . '[' . strlen($matches[0]) . 'letter]';
}
function countDigits($matches) {
return $matches[0] . '[' . strlen($matches[0]) . 'digit]';
}
$input = "365 days";
$patterns = [
'/[a-z]+/i' => 'countLetters',
'/[0-9]+/' => 'countDigits'
];
$result = preg_replace_callback_array($patterns, $input);
echo $result;
?>
نکات مهم
نکته: با limit می توانی تعداد جایگزینی را محدود کنی.
نکته: اگر فقط یک الگو داری، از preg_replace_callback استفاده کن.
نکته: برای جایگزینی ساده تر، preg_replace کافی است.
هشدار: هنگام خطای الگو، از preg_last_error وضعیت را بگیر.
جمع بندی سریع
- هر الگو کال بک مخصوص دارد.
- ترتیب الگوها روی نتیجه اثر دارد.
- limit سقف جایگزینی را تعیین می کند.
- count تعداد جایگزینی ها را برمی گرداند.