تابع split در php از نسخه ۵٫۳٫۰ بعد جز توابع منسوخ معرفی شد و در نسخه php 7.0.0 به طور کامل حذف شد . این تابع برای شکستن یک رشته از هم بر اساس یک الگوی regex یا همان عبارت های باقاعده به یک آرایه استفاده می شد . تابع split رشته ها را با حساسیت نسبت به حروف کوچک و بزرگ با الگوی مشخص شده به اجزای مختلف تقسیم می کرد .
بنابراین , این گونه از تجزیه رشته با الگو با راندمان بسیار ضعیفی روبرو بود . به همین دلیل تابع split از php حذف شد .
کد php زیر به شما یک مثال برای تابع split() با الگوی [- :]
بر روی رشته مورد نظر را نشان می دهد .(بله متوجهم با عبارت باقاعده ای که می شناختیم متفاوت است !)
1 2 3 4 |
<?php $str = "yyyy-mm-dd HH:ii:ss"; split('[- :]', $str ); ?> |
تابع split با الگوی POSIX regex سازگار بود اما در نسخه ۵٫۳٫۰ با PCRE (PERL Compatible Expression) جایگزین شد. بنابراین , اگر از این تابع در نسخه های بالاتر از ۵٫۳٫۰ استفاده کنیم با خطای E_DEPRECATED
که یک warning notice است , مواجه خواهیم شد .
برای آشنایی با انواع خطاها در php کلیک کنید توابع جایگزینی برای جدا کردن یک رشته به آرایه وجود دارد . این توابع عبارت اند از preg_split()
, str_split
() و تابع explode()
. کد php زیر به شما نحوه استفاده از تابع preg_split()
برای جداسازی یک رشته تاریخ با استفاده از الگوی regex را نشان می دهد .
1 2 3 4 |
<?php $date_array = preg_split("/[\/\.-]+/", date('d-m-y')); print_r($date_array); ?> |
خیلی خوب است که فرق بین POSIX و PCRE را در استفاده از regex (عبارت های باقاعده) را بدانیم . این موارد در زیر لیست شده اند
- توابع PCRE مثل
preg_split()
,preg_match()
وpreg_replace
, الگوهای تعریف شده در آن ها باید در یک خط مورد (slash / ) باز و بسته قرار بگیرند - در POSIX , توابعی که به حروف کوچک و بزرگ حساس هستند و نیستند به دو تابع مختلف تقسیم می شوند . مثل
split()
وspliti()
. POSIX توابع متفاوتی برای هر دو مورد case-insensitive و case-sensitive دارد . اما مثلا در تابعpreg_split()
ما باید الگو را به صورت حساس به حروف کوچک و بزرگ تعریف کنیم . - POSIX , به دنبال طولانی ترین مورد تطبیقی با الگوی داده شده در رشته مورد نظر می گردد . اما PCRE حتی کوچکترین رشته تطابق یافته با الگو را موثر می داند و بسیار سرعت آن بالاست .
جداسازی رشته با تابع explode در php
با تابع explode که در مقاله زیر هم در مورد آن مفصل صحبت کردیم , می توانیم از رشته به جای الگوی عبارت با قاعده برای جداسازی یک رشته و قرار دادن آن ها در یک آرایه استفاده کنیم. بنابراین نیاز به هیچ یک از POSIX یا PCRE ها در هنگام اجرای تابع explode نداریم . به همین دلیل این تابع بسیار سریع تر از هر دو تابع split() و preg_split() است .
کد php زیر به شما نحوه جدا سازی یک رشته بر اساس فاصله (space) با تابع explode() را نشان می دهد.
1 2 3 4 5 |
<?php $welcome_message = "Welcome to php environment"; $word_array = explode( ' ', $welcome_message ); print_r($word_array); ?> |
خروجی آن به صورت آرایه ای خواهد بود که می بینید هر کلمه در یک خانه از آرایه به ترتیب قرار گرفته اند .
1 2 3 4 5 6 7 |
Array ( [0] => Welcome [1] => to [2] => php [3] => environment ) |
توابع کار با رشته ها همانصور که در مقالات قبل هم گفتم تعداد بسیاری زیادی از توابع زبان برنامه نویسی php را تشکیل می دهند و همانطور که دیدید بسیار بسیار می تواند کاربردی و مهم باشند
هر گونه مشکلی در پیاده سازی کدها داشتید ، از قسمت نظرات اقدام کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید.
سلام ، خیلی ممنون از آموزش هایی که در سایت قرار میدهید
سوالی داشتم، آیا میشه از این راه استفاده کرد تا در تلگرام بعد از دریافت یک لینک و تکست برای مثال ( گوگل – http://www.google.com ) لینک و تکست را از هم جدا کرد و در جاهای مختلف و یا بصورت یک کلید شیشه ای استفاده کرد ؟؟؟
تشکر
سلام. خوشحالیم که مفید واقع شده.
بله میتونید استفاده کنید و مثل توابع explode,implode این تابع هم بسیار پرکاربرد هست