رشتهها یکی از پرکاربردترین نوعهای دادهای در برنامه نویسی هستند. رشته در PHP اهمیت زیادی دارد چون اکثراً با کاربران سروکار داریم و باید بتوانیم متنها و محتوای مختلفی را نمایش دهیم. در این آموزش با رشته آشنا شده و ۹ ترفند جذاب کار با آن را یاد میگیریم.
هر بخش از یک اسکریپت وب را نگاه کنیم، حتماً ردپایی از رشته یا String میبینیم. برای مثال، ۵ مورد زیر جاهایی هستند که با رشتهها سروکار داریم:
- چاپ پیام برای کاربر
- دریافت ورودی از کاربر
- ذخیره اطلاعات متنی در پایگاه داده
- کار با نام کاربری و کلمه عبور کاربر
- نمایش کدهای HTML یا CSS در صفحه سایت
در ابتدا نحوه تعریف و استفاده از رشته در PHP را میآموزیم. سپس توابع و ترفندهایی برای کار حرفهایتر با رشتهها را معرفی میکنم. این جلسه یکی از جلسات ساده اما پرکاربرد آموزش PHP است. 🙂
فهرست محتوای آموزش
تعریف رشته در PHP
از نظر تعریفی، رشته مجموعهای از کاراکترهاست. همانطور که میدانید حروف الفبا، اعداد یا علامتها هر کدام یک کاراکتر محسوب میشوند. بنابراین یک رشته را میتوان مجموعهای از انواع کاراکترها دانست.
رشتهها در زبان PHP با علامت '
یا "
شروع شده و با همان علامت به پایان میرسد. این علامتها علامت نقل قول انگلیسی هستند که به آنها در اصطلاح تک کوتیشن (Single Quote یا '
) و دابل کوتیشن (Double Quote یا "
) گفته میشود.
در حالت کلی تفاوتی برای استفاده از این دو وجود ندارد و هر دو یک رشتهاند. اما برای استفاده از متغیر درون یک رشته میبایست از حالت دوم استفاده کنیم. این مورد را در ادامه بیشتر توضیح میدهم.
<?php
$name = 'Omid';
$site = "SabzDanesh.com";
?>
قطعاً با تعریف متغیر در PHP آشنا هستید. در قطعه کد بالا، ما دو متغیر $name
و $site
را بهصورت رشتهای تعریف کرده و مقادیری برای آنها در نظر گرفتهایم.
میتوان گفت که اندازه رشته در PHP تقریباً هیچ محدودیتی ندارد. در نسخههای ماقبل 7 زبان PHP، حجم هر رشته میتوانست حدود 2 گیگابایت باشد. اما در نسخه 7 و بعد از آن، با استفاده از فضای 64 بیتی، این محدودیت بهنوعی برداشته شد.
البته همان 2 گیگابایت هم عدد بسیار بزرگی است! هر کاراکتر یک بایت فضا اشغال کرده و با این حساب میتوان میلیونها کاراکتر را در یک رشته نگه داشت!
چاپ رشته در PHP
برای چاپ یک رشته در PHP میتوان از توابع مختلفی استفاده کرد. در حقیقت استفاده از هر تابعی که برای چاپ استفاده میشود مجاز است.
یکی از پرکاربردترین این توابع، تابع یا دستور echo برای چاپ رشته است. این تابع نیازی به ()
نداشته و میتوان رشته یا متغیر رشتهای را مستقیماً جلوی آن نوشت. در آموزش پرینت در PHP در مورد این تابع و توابع پرکاربرد دیگر مثالهای بیشتری زدهام.
<?php
$name = 'Omid';
echo $name;
// output: Omid
echo 'SabzDanesh.com';
// output: SabzDanesh.com
?>
کار با رشته در PHP
توابع و ترفندهای زیادی برای کار با رشتهها در PHP وجود دارد. اینجا روشها و توابعی که بیشترین استفاده را دارند معرفی میکنم. در دوره مکمل PHP و جلسات بعدی همین دوره، با ترفندهای بیشتری آشنا میشوید.
در ابتدا در مورد کار با چند رشته و اتصال رشتهها به هم در PHP صحبت میکنم. سپس به تعریف زیر رشته، محاسبه اندازه رشته و تعداد کلمات یک رشته میپردازم.
اتصال چند رشته به هم در پی اچ پی
بارها اتفاق میافتد که بخواهیم چند رشته را به یکدیگر متصل کنیم. برای مثال فرض کنید که نام و نام خانوادگی کاربر را از او گرفته و میخواهیم برایش یک پیام خوشآمدگویی نمایش دهیم.
این اطلاعات در دو متغیر $name
و $family
ذخیره شده است. برای اتصال دو رشته به یکدیگر از علامت نقطه (.
) بین آنها استفاده میکنیم.
از نقطه برای اتصال (الحاق یا concat) چند رشته هم استفاده میشود. به قطعه کد زیر توجه کنید:
<?php
$name = 'Sara';
$family = 'Azadegan';
$full_name = $name . $family;
?>
اگر مقدار موجود در متغیر $full_name
را چاپ کنیم، نتیجه اسم و فامیل به هم چسبیده میشود:
<?php
echo $full_name;
// output: SaraAzadegan
?>
برای ایجاد فاصله میان دو اسم از یک کاراکتر فاصله (space) در هنگام اتصال دو رشته استفاده میکنیم. این کاراکتر را میتوان بهصورت ' '
در میان دو متغیر نام و نام خانوادگی قرار داد:
<?php
echo $name . ' ' . $family;
// output: Sara Azadegan
?>
به همین راحتی!
ترفند: اتصال رشته به یک متغیر
اگر بخواهیم چند مقدار مختلف را به انتهای یک رشته اضافه کنیم، احتمالاً چندین بار نام متغیر رشته را تکرار میکنیم؛ یعنی چیزی شبیه زیر:
<?php
$str = $str . 'NEW STRING!';
?>
برای جلوگیری از تکرار نام متغیر، میتوانیم از عملگر ترکیبی =.
استفاده کنیم. عملگرهای ترکیبی دیگری نیز وجود دارند که در آموزش عملگرهای PHP به آنها پرداختهام.
با استفاده از این عملگر ترکیبی، رشتهی سمت راست عملگر به انتهای رشتهی متغیر سمت چپ عملگر اضافه شده و نتیجه درون متغیر سمت چپ ریخته میشود.
<?php
$msg = "Hello Dear ";
// Some codes...
$name = "omid";
$msg .= $name;
// Some Codes...
echo $msg . '!';
// output: Hello Dear omid!
?>
زیر رشته چیست ؟
زیر رشته (Sub String) به هر قطعه کوچکتر از یک رشته گفته میشود. در PHP توابعی که با substr شروع میشوند برای کار با زیر رشتهها در نظر گرفته شدهاند. برای مثال در قطعه کد زیر با تابع substr()
یک تکه از رشته اصلی را جدا میکنم:
<?php
$str = "Welcome to SabzDanesh.com!";
echo substr($str, 11, 10); // "SabzDanesh"
?>
توابع بیشتری برای کار با زیر رشته در PHP وجود دارند؛ مثل substr_count()
که تعداد تکرار یک زیررشته خاص را در متن میشمارد. در آموزش زیر توابع مفید این موضوع را با هم یاد میگیریم:
محاسبه اندازه رشته در PHP
برای محاسبه اندازه یک رشته در پیاچپی از تابع strlen()
استفاده میکنیم. این تابع یک ورودی از نوع رشته گرفته و در خروجی یک عدد صحیح به ما میدهد.
<?php
echo strlen("PHP Tutorial Series");
// output: 19
?>
از این تابع میتوانیم در شرطهای PHP استفاده کنیم. مثلاً در قطعه کد زیر، اگر چیزی در متغیر $username
نداشته باشیم (طول 0 باشد) خطایی به کاربر نمایش میدهیم:
<?php
if( strlen($username) == 0 )
echo "فیلد نام کاربری نمیتواند خالی باشد!";
?>
محاسبه تعداد کلمات یک رشته
اگر با ویرایشگرهای متن کار کرده باشید، حتماً، دیدهاید که تعداد کلمات متن در حال تایپ شما را در کادری به شما نمایش میدهد. اگر بخواهیم تعداد کلمات یک رشته را محاسبه کنیم، از تابع str_word_count()
در زبان PHP استفاده میکنیم.
<?php
echo str_word_count("Hello dear SabzDanesh users!");
// output: 4
?>
این تابع بهطور پیشفرض فقط برای رشتههای انگلیسی پاسخ درستی میدهد. برای رشته فارسی، میتوان encoding پردازش را تغییر داد و یا یک تابع ساده برای این کار نوشت. تابعی که رشته را به کمک فاصلهها (' '
) جدا کرده تا بتوان تعداد کلمات را محاسبه کرد.
توابع کاربردی کار با رشته در PHP
اگر دوست دارید همه توابع کار با رشته PHP را بدانید میتوانید به مستندات آن در سایت رسمی مراجعه کنید. در ادامه چند تابع مفید را با شما بررسی میکنم.
اگر در ابتدای راه هستید، توصیه نمیکنم که همه توابع کار با رشته را حفظ کنید! خوب است بدانید چنین توابعی هستند و از برخی از آنها استفاده کنید. هر زمان نیاز شد میتوانید به دنبال آن بگردید. به مرور زمان و تمرین زیاد، این توابع در خاطرتان میماند.
جدا کردن یک رشته توسط کاراکتر خاص (split کردن رشته)
گاهی رشتهای داریم که میخواهیم به وسیله یک کاراکتر خاص آن را به چند قسمت تقسیم کنیم. مثلاً فرض کنید یک رشته از اسامی کاربران داریم که اسم هر کاربر با علامت ویرگول انگلیسی (کاما یا ,
) از هم جدا شده است. میخواهیم این اسامی را درون یک متغیر بهصورت آرایه بریزیم.
برای این کار از تابع explode()
استفاده میکنیم. این تابع دو ورودی اجباری میگیرد:
- ورودی اول: کاراکتر یا رشته جداکننده (delimiter)
- ورودی دوم: رشتهی مورد نظر برای جداسازی
خروجی این تابع یک آرایه PHP از رشتههاست که هر خانه آن یک زیر رشته از رشته اصلی است که بهواسطه جداکننده جدا شده است.
<?php
$names = "omid,sara,samiyar,hossein,negar,nazanin";
$names_arr = explode( ',', $names );
echo $names_arr[2];
// output: samiyar
print_r( $names_arr );
?>
در قسمت قبل گفتم که برای محاسبه تعداد کلمات فارسی، ابتدا میبایست آنها را توسط جداکننده فاصله (' '
) از هم جدا کنیم. در قطعه کد زیر همین کار را انجام داده و آرایه نهایی را چاپ کردهام:
<?php
$str = "این یک متن آزمایشی برای جداسازی کلمات فارسی است";
print_r( explode( ' ', $str ) );
/* output:
Array (
[0] => این
[1] => یک
[2] => متن
[3] => آزمایشی
[4] => برای
[5] => جداسازی
[6] => کلمات
[7] => فارسی
[8] => است ) */
?>
حذف فضای خالی ابتدا و انتهای رشته
گاهی یک ورودی از کاربر گرفتهایم و یا اطلاعاتی را از درون پایگاه داده خواندهایم و میخواهیم مطمئن شویم که در ابتدا و انتهای این رشته، فضای خالی وجود نداشته باشد.
برای مثال، یک رشته ' '
از نظر PHP دارای 5 کاراکتر space است اما از نظر ما یک رشته خالی در نظر گرفته میشود.
برای حذف spaceها از ابتدا و انتهای یک رشته، از تابع trim()
استفاده میکنیم:
<?php
$str = " Test Text! ";
echo $str;
// output: Test Text!
echo trim( $str );
// output: Test Text!
?>
این تابع یک ورودی اجباری از نوع String گرفته و خروجی آن نیز یک String است. پارامتر دوم این تابع اختیاری است. میتوانیم با تعریف علامتها یا کاراکترهای خاص در آرگومان دوم، آنها را نیز از ابتدا و انتهای رشته حذف کنیم.
اگر مایلید در مورد پارامتر دوم تابع trim
بیشتر بدانید، به مستندات آن مراجعه کنید.
حروف کوچک یا بزرگ کاراکترها در رشته
اگر در برنامه خود با رشتههای انگلیسی سر و کار داشته باشید، ممکن است توابع strtolower()
و strtoupper()
برایتان کاربردی باشد. این دو تابع تمام حروف یک رشته را (به ترتیب) به حروف کوچک یا حروف بزرگ تبدیل میکنند.
ورودی و خروجی این توابع یک رشته است.
<?php
$site = "SabzDanesh.COM";
echo strtolower( $site );
// output: SABZDANESH.COM
echo strtoupper( $site );
// output: sabzdanesh.com
?>
جایگزینی کلمات یک رشته با کلمهای خاص
برای جایگزین کردن کلمات یا replace کلمات در یک رشته از تابع str_replace()
استفاده میکنیم. این تابع سه ورودی اجباری و یک ورودی اختیاری دارد:
- ورودی اول: رشته یا کلمه مورد نظر برای جستجو است.
- پارامتر دوم: رشته یا کلمه برای جایگزین شدن
- ورودی سوم: رشته اصلی
- پارامتر چهارم (دلخواه): تعداد جایگزینیها
با تعریف ورودی چهارم که بهصورت یک عدد صحیح در نظر گرفته میشود، میتوان مشخص کرد که فقط 5 تا کلمه اول در رشته جایگزین شود و باقی متن بدون تغییر بماند. با عدم تعریف این پارامتر، عملیات جایگزینی در تمام متن انجام میشود.
<?php
$str = "Banana is a delicious fruit. Banana have many benefits for the body!";
echo str_replace( 'Banana', 'Apple', $str );
// output:
// Apple is a delicious fruit. Apple have many benefits for the body!
?>
محاسبه هش رشته در php
هشها برای رمزنگاری و کدگذاری رشتهها استفاده میشوند. البته میتوان از آنها برای اهداف دیگر نیز استفاده کرد. توابع مختلفی برای هش کردن به روشهای مختلف در زبان برنامهنویسی PHP وجود دارد. دو مورد از پرکاربردترین آنها را مختصراً بررسی میکنیم:
1- محاسبه هش sha1
تابع sha1()
یک ورودی بهصورت رشته گرفته و خروجی را به صورت یک رشته به ما میدهد.
<?php
echo sha1( "Test Text" );
// output: a66cce1c6c9350dc4683fe9f05307333c84aab23
?>
2- محاسبه هش md5
با استفاده از تابع md5()
میتوان هش md5 یک رشته را محاسبه کرد. این تابع رشته را به عنوان ورودی گرفته و یک رشته 32 کاراکتری به ما برمیگرداند. توجه داشته باشید که سایز هش md5 همیشه شامل 32 کاراکتر است.
<?php
echo md5( "Test Text" );
// output: f1feeaa3d698685b6a6179520449e206
?>
با استفاده از توابع هش و رشتهها میتوان رشتههای تصادفی در PHP ایجاد کرد. برای کسب اطلاعات بیشتر، میتوانید مقاله زیر را بخوانید.
استفاده از دو تابع زیر برای نگهداری رمزهای عبور پیشنهاد نمیشود. پیشنهاد میکنم برای ذخیرهسازی رمز عبور از روشهای ترکیبی یا سایر توابع رمزنگار استفاده کنید. آموزش زیر در اینباره میتواند برایتان مفید باشد.
جمعبندی آموزش: رشته در PHP
در این آموزش با نوع داده رشتهها در PHP آشنا شدیم. فهمیدیم که رشته مجموعهای از کاراکترهاست که درون ""
یا ''
نمایش داده میشوند. رشتهها را میتوان به یکدیگر وصل کرد، از آنها زیررشته ساخت و یا تعداد کاراکترها و کلمات یک رشته را محاسبه کرد.
با توابع مهم و پرکاربرد رشته در PHP آشنا شدیم. میتوانیم با تابع explode()
یک رشته را تفکیک و با تابع trim()
فضای خالی ابتدا و انتهای آن را حذف کنیم. همچنین با تابع str_replace()
یک حرف یا عبارت را با مقدار دلخواه جایگزین کنیم.
امیدوارم به خوبی با رشتههای پی اچ پی آشنا شده باشید. همین الآن چند رشته تعریف کنید، آنها را به هم متصل کنید، چاپ کنید، و تغییراتی رویشان اعمال کنید. سپس آمادهاید که به جلسه بعدی بروید: 🙂
به نظر شما چه تابع مهم و پرکاربرد در کار با رشته PHP در این آموزش گفته نشده؟ یا فکر میکنید در مورد چه کار مهمی با رشتهها صحبت نکردیم؟ اگر سؤال یا نظری دارید، از بخش دیدگاهها مطرح کنید.
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش PHP
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
واقعا مطالبتون عالی انگار سر کلاس درسه گیرایی مطالب عالیییی بهترین سایت آموزش ایشالا موفق باشید
خوشحالیم که این آموزشها مفید میدونید مرتضی عزیز 🙂
به زودی دورههای تکمیلی و ویدئویی PHP هم توی سایت منتشر میشه. بهمون سر بزنید حتماً
بیشتر وقتم داخل سایت شما هستم مسلمون خخخخخ
سلام میشه کدی بنویسی که رشته ای از حروف الفبا را پیدا کند به طور تصادفی
سلام
منظورتون رشته تصادفیه؟ آموزش ایجاد رشته تصادفی که در اواخر آموزش بهش لینک داده شده رو ببینید؛ پیشنهادهایی برای همین کاره.
سلام و وقت بخیر. خیلی عالی. من برای یه موضوعی از طریق سرچ گوگل اینجا رسیدم. آموزشهاتون عالین. فقط من اونچه براش اومده بودم پیدا نکردم خواهشا راهنمایی کنین. برای حذف همه فضاهای خالی در داخل یک رشته (در اواسط متن) چه تابع یا ترکیب توابعی وجود داره؟
سلام
میتونید با تابع
str_replace()
که معرفی شده، همه فاصلهها رو (' '
) با رشته خالی جایگزین کنید. 🙂بسیار سپاسگزارم. درست شد. ❤👍
آموزش خیلی خوبیه
درباره
{}
داخل رشته هم بخشی رو اضافه کنید عالی میشهممنون برای پیشنهادت.
حتماً در بهروزرسانی بعدی آموزش این مورد رو اضافه میکنیم.
سلام خسته نباشید.
من یه کد میخام که مثلا اسم علی رو تو خروجی اینجوری چاپ کنه
a
al
ali
حلقه for داره قطعا اما نمیدونم از کدوم تابع استفاده میشه.
سلام
میتونید مستقیماً از اندیسها هم استفاده کنید ولی شاید بهتر باشه از substr کمک بگیرید. اینطور که توی حلقهای که به اندازه طول رشته تکرار میشه در هر بار، اندازه substr رو یکی بیشتر کنید. دفعه اول فقط یه رشتهی یک کاراکتری رو بگیرید و دفعه بعدی دو کاراکتری و همینطور تا انتها.