آموزش جامع رشته در PHP

رشته‌ها یکی از پرکاربردترین نوع‌های داده‌ای در برنامه نویسی هستند. رشته در 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 با تابع substr و ترفندهای آن

کار با زیررشته در PHP با تابع substr و ترفندهای آن

محاسبه اندازه رشته در 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

توابع کاربردی کار با رشته در 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 );
?>
عکس خروجی نتیجه تابع explode
عکس خروجی نتیجه تابع explode

در قسمت قبل گفتم که برای محاسبه تعداد کلمات فارسی، ابتدا می‌بایست آن‌ها را توسط جداکننده فاصله (' ') از هم جدا کنیم. در قطعه کد زیر همین کار را انجام داده و آرایه نهایی را چاپ کرده‌ام:

<?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

در این آموزش با نوع داده رشته‌ها در PHP آشنا شدیم. فهمیدیم که رشته مجموعه‌ای از کاراکترهاست که درون "" یا '' نمایش داده می‌شوند. رشته‌ها را می‌توان به یکدیگر وصل کرد، از‌ آن‌ها زیررشته ساخت و یا تعداد کاراکترها و کلمات یک رشته را محاسبه کرد.

با توابع مهم و پر‌کاربرد رشته در PHP آشنا شدیم. می‌توانیم با تابع explode() یک رشته را تفکیک و با تابع trim() فضای خالی ابتدا و انتهای آن را حذف کنیم. همچنین با تابع str_replace() یک حرف یا عبارت را با مقدار دلخواه جایگزین کنیم.

امیدوارم به خوبی با رشته‌های پی اچ پی آشنا شده باشید. همین الآن چند رشته تعریف کنید، آن‌ها را به هم متصل کنید، چاپ کنید، و تغییراتی رویشان اعمال کنید. سپس آماده‌اید که به جلسه بعدی بروید: 🙂

به نظر شما چه تابع مهم و پرکاربرد در کار با رشته PHP در این آموزش گفته نشده؟ یا فکر می‌کنید در مورد چه کار مهمی با رشته‌ها صحبت نکردیم؟ اگر سؤال یا نظری دارید، از بخش دیدگاه‌ها مطرح کنید.

این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش PHP