البحث في الموقع
المحتوى عن 'السلاسل النصية'.
-
سنكمل الآن ما تعلمناه في الدرس السابق عن السلاسل النصية. وقد كان محتوى الدرس الأول كالآتي: إنشاء والوصول إلى السلاسل النصية باستخدام $ و {}، واستخدام الدالة strlen(). البحث في السلاسل النصية باستعمال الدوال: strstr() strpos() و strrpos() substr_count() strpbrk() الاستبدال في السلاسل النصية باستخدام الدوال: str_replace() ()substr_replace ()strtr strtr() التعامل مع حالات الحروف الكبيرة (uppercase) والصغيرة (lowercase) باستخدام الدوال: strtolower() strtoupper() ucfirst() lcfirst() ucword() النسخ غير الحساسة لحالة الأحرف لجميع الدوال السابقة. أما هذا الدرس فسيحتوي على ما يلي: تنسيق السلاسل النصية باستخدام printf()، بما في ذلك تعيين دقة الأرقام العشرية. إزالة الفراغات (trimming) من أطراف السلاسل النصية باستعمال الدوال: trim() ltrim() rtrim() إضافة حواشي (paddings) للنصوص باستعمال الدوال: str_pad() STR_PAD_RIGHT STR_PAD_LEFT STR_PAD_BOTH التفاف (wrapping) النصوص عبر استعمال الدالة wordwrap(). تنسيق الأرقام باستخدام الدالة number_format(). الوقت والتاريخ. تنسيق السلاسل النصية الدالة printf() الدالة printf() هي أداةٌ قويةٌ تمكِّنك من تنسيق السلاسل النصية بطرقٍ مختلفة، تأخذ printf() وسيطًا يُسمى سلسلة التنسيق (format string) يُتبَع عادةً بوسيطٍ اختياري أو أكثر يحتوي على السلسلة أو السلاسل التي ستوضع في السلسلة السابقة، ثم ستطبع هذه الدالة النتيجة النهائية. سلسلة التنسيق تحتوي على نصٍ عادي وفيه مُحدِّدات التنسيق (conversion specifications)، يتطلب وجود كل محدد تنسيق وسيطًا إضافيًا يُمرَّر إلى printf()، ومهمته هي تنسيق ذاك الوسيط ووضعه في سلسلة التنسيق، ثم بعد ذلك ستُعرَض السلسلة النهائية المُنسَّقة؛ تبدأ محددات التنسيق دومًا بإشارة النسبة المئوية (%)، ربما يبدو الأمر معقدًا للوهلة الأولى، لكن مثالًا بسيطًا كهذا سيجعل إيصال الفكرة أمرًا هينًا: <?php // الناتج: "Pi rounded to a whole number is: 3" printf( "Pi rounded to a whole number is: %d", M_PI ); ?> إن عبارة "Pi rounded to a whole number is: %d" هي سلسلة التنسيق، و "%d" ضمن السلسلة السابقة هي محدد للتنسيق، وفي هذه الحالة، يُخبِر هذه المحدد الدالة printf() أن تقرأ الوسيط الإضافي وتضعه -بعد تنسيقه كعدد صحيح- في سلسلة التنسيق؛ الوسيط الإضافي هو الثابت M_PI الموجود في لغة PHP، التي يُمثِّل القيمة التقريبية للعدد π بعدد معيّن من المنازل العشرية (14 منزلة افتراضيًا)؛ أي أنَّ النتيجة النهائية لاستدعاء الدالة السابقة هي طباعة سلسلة التنسيق مع استبدال "%d" بقيمة الثابت π مُقرَّبًا إلى أقرب عدد صحيح. المزيد من المُحدِّدات: b: معاملة الوسيط كعدد صحيح (integer) وتنسيقه كعدد ثنائي. c: معاملة الوسيط كعدد صحيح وتنسيقه كمحرف بنظام ASCII الذي يحمل نفس القيمة العددية. d: معاملة الوسيط كعدد صحيح وتنسيقه كعدد عشري مع إشارة (signed). e: تنسيق الوسيط بالطريقة العلمية (مثلًا، 3.45e+2). f: تنسيق الوسيط كعدد ذو فاصلة عائمة (floating point)، آخذًا بالحسبان إعدادات «المحليّة» (locale) الحالية (على سبيل المثال، تستعمل بعض الدول الأوروبية الفاصلة كعلامة تفصل الأرقام الصحيحة عن الأرقام العشرية عوضًا عن النقطة؛ أي 3,14 بدلًا من 3.14). F: تنسيق الوسيط كعدد ذو فاصلة عائمة بغض النظر عن إعدادات المحليّة. o: معاملة الوسيط كعدد صحيح وتنسيقه كعدد بالنظامي الثماني. s: تنسيق الوسيط كسلسلة نصيّة. u: معاملة الوسيط كعدد صحيح وتنسيقه كعدد عشري دون إشارة (unsigned). x: معاملة الوسيط كعدد صحيح وتنسيقه كعدد بالنظام الست عشري بأحرفٍ ذات الحالة الصغيرة (lowercase). X: معاملة الوسيط كعدد صحيح وتنسيقه كعدد بالنظام الست عشري بأحرفٍ ذات الحالة الكبيرة (uppercase). %: إظهار إشارة النسبة المئوية (%)، لا يتطلب هذا المُحدِّد وجود وسيط إضافي. إضافة حواشي إلى المخرجات يمكنك إضافة محارف إلى يسار (افتراضيًا) أو إلى يمين الوسيط الذي يتم تنسيقه كي يُصبِح بعرضٍ معيّن، وهذا مفيدٌ إن أردت أن تُضيف أصفارًا تسبِق الأعداد، أو أن تحاذي عدِّة سلاسل نصية أفقيًا عبر إضافة فراغات على جوانبها. <?php // الناتج: "000123" printf( "%06d<br/>", 123 ); // الناتج: "004567" printf( "%06d<br/>", 4567 ); // الناتج: "123456" printf( "%06d<br/>", 123456 ); ?> دقة الأرقام عندما تُظهِر الأعداد ذات الفاصلة العائمة باستخدام المحدِّد f أو F، يمكنك استعمال مُحدِّد لدقة الأرقام لتعيين عدد المنازل العشرية التي سيُقرَّب (أو يدوَّر) إليها الرقم. لإضافة مُحدِّد دقة الأرقام، أضف نقطة (.) يلحقها عدد المنازل العشرية التي ستستخدم، قبل مُحدِّد النوع؛ انظر إلى المثال الآتي للتوضيح: <?php // الناتج: "123.456700" (الدقة الافتراضية) printf( "%f<br />", 123.4567 ); //الناتج : "123.46" printf("%.2f<br />", 123.4567 ); // الناتج: "123" printf("%.0f<br />", 123.4567 ); // الناتج: "123.4567000000" printf("%.10f<br />", 123.4567 ); ?> يمكنك استخدام مُحدِّد الحاشية مع مُحدِّد الدقة، في حال أردت أن يكون طول الرقم معينًا (بما في ذلك الأرقام بعد الفاصلة العشرية، والفاصلة نفسها أيضًا): <?php // الناتج: "123.46" printf( "%.2f<br />", 123.4567 ); // الناتج: "000000123.46" printf( "%012.2f<br />", 123.4567 ); // الناتج: " 123.4567" printf( "%12.4f<br />", 123.4567 ); ?> إزالة الفراغات من أطراف السلاسل النصية قد لا ترغب في بعض الأحيان بوجود أيّة فراغات قبل أو بعد السلسلة النصية، وفي هذه الحالة نستعمل هذه الدوال: trim(): إزالة الفراغات (white-space) من بداية ونهاية السلسلة النصية. ltrim(): إزالة الفراغات من بداية السلسلة النصية فقط. rtrim(): إزالة الفراغات من نهاية السلسلة النصية فقط. انظر إلى ناتج المثال الآتي للتوضيح: <?php echo trim(" hsoub "); echo ltrim(" hsoub "); echo rtrim(" hsoub "); ?> إضافة حواشي إلى النصوص لقد رأينا سابقًا كيف يمكننا استخدام الدالة printf() لإضافة حواشي إلى بداية أو نهاية سلسلة نصيّة؛ لكن لغة PHP توفِّر دالةً مخصصةً لهذا الأمر اسمها str_pad()، وهي أكثر مرونةً من printf() وأسهل استخدامًا. لاستعمال الدالة str_pad()، مرِّر السلسلة التي ستتم إضافة الحواشي إليها، وعرض السلسلة النهائي، وستعيد الدالة السلسلة وقد تمت إضافة فراغات إلى يمينها (افتراضيًا): <?php echo '<pre>'; echo str_pad( "Hello, world!", 20 ); // الناتج: "Hello, world! " echo '</pre>'; ?> ولإضافة محارف أخرى غير الفراغ كحاشية، فمرِّر سلسلةً نصيةً كوسيطٍ ثالثٍ اختياري، لاحظ أنَّك تستطيع استخدام محرف وحيد أو أكثر من محرف؛ وفي الحالة الأخيرة، ستُكرَّر السلسلة النصية حسب العرض المُحدَّد: <?php // الناتج: "Hello, world!*******" echo str_pad( "Hello, world!", 20, "*" ) . "\n"; // الناتج: "Hello, world!1231231" echo str_pad( "Hello, world!", 20, "123" ) . "\n"; ?> يمكنك جعل الدالة str_pad() تضع الحاشية على يسار السلسلة النصية، أو على يمنيها ويسارها معًا؛ وذلك بتمرير وسيط ثالث اختياري يحتوي على ثوابت الدالة المذكورين في الجدول الآتي: STR_PAD_RIGHT: إضافة الحاشية على اليمين (الحالة الافتراضية)، مما يحاذي السلسلة النصيّة إلى اليسار. STR_PAD_LEFT: إضافة الحاشية على اليسار، مما يحاذي السلسلة النصيّة إلى اليمين. STR_PAD_BOTH: إضافة الحاشية على الطرفين الأيمن والأيسر معًا، مما يؤدي إلى توسيط السلسلة النصية ما أمكن. مثال: (لاحظ وجود 3 محارف للحاشية على اليسار، و4 على اليمين؛ إذ لا يمكن توسيطها تمامًا): <?php // الناتج: "***Hello, world!****" echo str_pad( "Hello, world!", 20, "*", STR_PAD_BOTH ) . "\n"; ?> التفاف النصوص أحيانًا يكون عندك نصٌ طويلٌ مثل رسائل البريد الإلكتروني أو المقالات، وربما تريد أن تُقسَّم الأسطر بعرضٍ مختلف. تفعل الدالة wordwrap() هذا الأمر؛ يمكنك تحديد عدد المحارف في السطر عبر هذه الدالة، انظر إلى هذا المثال أولًا: <?php $myString = "this is my string which is very long. it is containing five lines and a number of white spaces"; echo wordwrap ($myString); echo "<br><br><br>"; echo wordwrap ($myString, 40); echo "<br><br><br>"; echo wordwrap ($myString, 40, "<br />"); ?> لاحظ النتيجة بنفسك بفتح مصدر صفحة الويب ورؤية النتيجة لمختلف الجمل بقيمٍ مختلفة للوسيط الثاني (غير 40، مثل 10، أو 15، أو 20 ...إلخ.). تنسيق الأعداد تُستعمَل الدالة number_format() لتنسيق الأعداد، وتستقبل وسيطًا أو وسيطين أو أربعة وسائط. أول وسيط هو العدد الذي سيُنسَّق الوسيط الثاني هو عدد المنازل العشرية الوسيط الثالث هو المحرف الذي سيفصل بين الأعداد الصحيحة والأرقام العشرية أما رابع وسيط، فيُحدِّد المحرف الذي سيفصل بين الآلاف في الأعداد الصحيحة يوضَّح ما سبق بالمثال الآتي: <?php $myNumber = 12344555.3453; // الناتج: 1,23,44,555.3453 echo number_format($myNumber); echo "<br>"; // الناتج: 1,23,44,555.34 echo number_format($myNumber,2); echo "<br>"; // الناتج: 1 23 44 555,3453 echo number_format($myNumber,2,',',' '); echo "<br>"; ?> الوقت والتاريخ يلزم الحصول على الوقت والتاريخ وعرضه بطريقة مناسبة كثيرًا في تطوير الويب، ولهذا توفِّر PHP الأدوات اللازمة لذلك. أهم تلك الأدوات هي الدالة date() التي تقبل سلسلةً نصيةً تُحدِّد تنسيق المخرجات، وتتألف من محارف التنسيق الآتية: d: يعيد رقم اليوم من الشهر، وتتراوح قيمته من 01 إلى 31. استخدام المحرف j للحصول على رقم اليوم دون 0 بادئة. m: يعيد رقم الشهر، وتتراوح قيمته من 01 إلى 12. استخدام المحرف n للحصول على رقم الشهر دون 0 بادئة. w: الحصول على رقم اليوم من الأسبوع، وتتراوح قيمته بين 0 الذي يشير إلى يوم الأحد، و6 ليوم السبت. h: الحصول على الساعة الحالية بنظام 12 ساعة. استخدم g للحصول على الساعة بنظام 24 دون 0 بادئة. استخدام a للحصول على am أو pm، و A للحصول على AM أو PM. H: الحصول على الساعة الحالية لكن بنظام 24 ساعة. استخدم G للحصول على الساعة بنظام 24 دون 0 بادئة. i: الحصول على الدقائق. s: الحصول على الثواني. Y: الحصول على السنة على هيئة أربعة أرقام. ويمكن تمرير وسيطٍ اختياري هو بصمة الوقت (timestamp) لكي تُعيد الدالة date() قيمة التاريخ والوقت لها، لكن إن لم تُحدِّد بصمة الوقت، فستؤخذ القيمة من ناتج الدالة time() التي تُعيد بصمة الوقت مقاسةً بالثواني منذ بداية وقت يونكس (Unix Time) (أي منتصف ليلة رأس السنة عام 1970). <?php // الناتج: 12:31:55 echo date('H:i:s'); // الناتج: 2015/12/23 echo date('Y/m/d'); ?> ملاحظة: يجدر بالذكر أنَّ الدالة mktime() تنُشِئ بصمة الوقت لتاريخ معيّن كي تستعملها مع الدالة date، شكلها العام هو الآتي: mktime($hour, $minute, $second, $month, $day, $year); حيث أول وسيط هو الساعة، والثاني هو الدقيقة، والثالث هو الثانية، والرابع هو الشهر، والخامس هو اليوم من الشهر، والسادس هو السنة؛ مثالٌ عن استعمالها: <?php // الناتج هو مثلًا: 1450872238 $current_time = time(); echo $current_time; // ناتج بصمة الوقت هو: 1030134920 $past_time = mktime(22, 35, 20, 8, 23, 2002); echo $past_time; // الناتج هو: 12-23-2015 13:03 // يمكن أن نحذف الوسيط الثاني، لأن الدالة date ستعتمد الوقت الحالي المُعادة من الدالة time افتراضيًا echo 'current date is: ' . date ('m-d-Y H:i' , $current_time); // الناتج هو: 08-23-2002 22:35 // يمكن أن نحذف الوسيط الثاني، لأن الدالة date ستعتمد الوقت الحالي المُعادة من الدالة time افتراضيًا echo 'a date in the past: ' . date ('m-d-Y H:i' , $past_time); ?> تمرين اكتب برنامجًا يأخذ تاريخ ميلاد المستخدم ثم يُظهِر عمره بالسنوات والأشهر والأيام؛ مثلًا: 35 سنة، و 4 أشهر، و23 يومًا. المصادر مقال Strings in PHP part-2 لصاحبه Harish Kumar. صفحة sprintf، و date في دليل PHP وغيرها.
-
سنبدأ الآن في تعلم التعامل مع السلاسل النصية وما هي العمليات التي تُجرى عليها. ولمّا كان الحديث عن السلاسل النصيّة يحتاج شرحًا طويلًا، فقد قسمناها إلى قسمين، لنأخذ فكرةً عن محتواهما: القسم الأول: إنشاء والوصول إلى السلاسل النصية باستخدام $ و {}، واستخدام الدالة strlen(). البحث في السلاسل النصية باستعمال الدوال: strstr() strpos() و strrpos() substr_count() strpbrk() الاستبدال في السلاسل النصية باستخدام الدوال: str_replace() ()substr_replace ()strtr strtr() التعامل مع حالات الحروف الكبيرة (uppercase) والصغيرة (lowercase) باستخدام الدوال: strtolower() strtoupper() ucfirst() lcfirst() ucword() النسخ غير الحساسة لحالة الأحرف لجميع الدوال السابقة. القسم الثاني: تنسيق السلاسل النصية باستخدام printf()، بما في ذلك تعيين دقة الأرقام العشرية. إزالة الفراغات (trimming) من أطراف السلاسل النصية باستعمال الدوال: trim() ltrim() rtrim() إضافة حواشي (paddings) للنصوص باستعمال الدوال: str_pad() STR_PAD_RIGHT STR_PAD_LEFT STR_PAD_BOTH التفاف (wrapping) النصوص عبر استعمال الدالة wordwrap(). تنسيق الأرقام باستخدام الدالة number_format(). الوقت والتاريخ. لماذا علي أن أتعلم عن السلاسل النصية؟ لأنه علينا -عند تطوير الويب- أن نحصل على البيانات من المستخدم؛ التي تكون في غالب الأحيان على شكل سلاسل نصيّة. لذا علينا أن نُرشِّح (filter) تلك البيانات لأغراضٍ أمنية، وذلك عبر التعلم عن كيفية التعامل مع السلاسل النصية. إنشاء السلاسل النصية والوصول إليها كما تعلم مسبقًا، نُعرِّف السلاسل النصية بكتابة النصوص ضمن علامتي اقتباس مفردتين أو مزدوجتين، وبإسنادها إلى متغير: $string = 'string'; أو: $string = "string"; سيتم تفسير أيّة متغيرات ترد ضمن السلاسل النصية بقيمة ذاك المتغير إن كانت السلسلة النصية محاطة بعلامتَي اقتباس مزدوجتين، وإلا فلن تُفسَّر تلك المتغيرات. أي أننا نستطيع أن نضع المتغيرات مباشرةً في السلاسل النصيّة كالآتي: <?php $site = 'academy.hsoub.com'; // الناتج هو: // Please visit academy.hsoub.com echo "Please visit $site"; // مثالٌ أكثر «تعقيدًا» $cat = "cat"; // {} تشير إلى اسم المتغير // الناتج هو: // these are cats echo "these are {$cat}s"; ?> يمكننا "تهريب" (escape) بعض المحارف الخاصة، لكن لاحظ أنَّ المحارف الخاصة لا يمكن تهريبها إذا كانت ضمن علامتي اقتباس مفردتين، إذ تعمل مع علامات الاقتباس المزدوجة فقط. <?php $site = 'academy.hsoub.com'; // \n هو محرف السطر الجديد /* ستحصل على مخرجات كما يلي في المتصفح: string academy.hsoub.com أما لو نظرت إلى مصدر الصفحة، فستجد شيئًا شبيهًا بما يلي: string academy.hsoub.com ذلك ﻷن HTML لا تأخذ الفراغات بعين الاعتبار، لكن ذلك مفيدٌ في PHP */ echo "string\n $site"; ?> ملاحظة: إذا أردت تضمين علامة اقتباس مفردة داخل سلسلة نصية محاطة بعلامتي اقتباس مفردتين، فعليك «تهريبها» عبر وضع شرطة خلفية مائلة (\) قبلها: echo 'chars\' escaping'; معرفة طول سلسلة نصية يمكن الحصول على طول السلاسل النصية باستعمال الدالة strlen()، حيث تأخذ وسيطًا وحيدًا هو السلسلة النصية، وتُعيد (returns) طول تلك السلسلة. <?php $site = 'academy.hsoub.com'; // الناتج هو 17 echo strlen($site).'</br>'; // الناتج هو 14 (بما في ذلك الفراغات) echo strlen('it is a string'); ?> ملاحظة: من المثير للاهتمام أنَّك تستطيع الوصول إلى المحارف (characters) في سلسلة نصيّة بكتابة $myname[0]، أو $myname[1] وهلّم جرًا إلى نهاية السلسلة النصية؛ هذه هي طريقة الوصول إلى عناصر المصفوفات، التي سنأخذها في درسٍ لاحق. البحث في السلاسل النصية تأخذ الدوال التي تبحث عن السلاسل النصية وسيطين، أولهما هو السلسلة التي ستبحث فيها، وثانيهما هو النص التي ستبحث عنه في تلك السلسلة. إن لم يُعثر على النص فستعيد تلك الدوال القيمة false؛ يلخِّص هذا الجدول أبرز تلك الدوال: strstr(): إن عُثِرَ على النص، فستعيد الدالة strstr() قسمًا من السلسلة النصية يبدأ من مكان العثور على النص إلى نهاية السلسلة. strpos(): تستعمل هذه الدالة للعثور على مكان وجود النص المُطابَق انطلاقًا من بداية السلسلة النصية، وستعيد مكانه. strrpos(): هذه الدالة شبيهة بالدالة السابقة strpos() إلا أنها تبدأ البحث من النهاية. substr_count(): تحصي عدد مرات مطابقة النص الذي نبحث عنه في السلسلة النصية. strpbrk(): التحقق من وجود الحرف في السلسلة النصية وستعيد السلسلة النصية التي تلي ذاك الحرف. ملاحظة: كل تلك الدوال السابقة (باستثناء substr_count()) ستعمل إلى أن تحدث أول مُطابَقة ثم ينتهي تنفيذها؛ فمثلًا، لو بحثنا عن h في "hsoub hosub" فستعيد الدالة strstr('hsoub hsoub', 'h') أول h تمت مطابقتها ثم سينتهي تنفيذها. انظر إلى المثال الآتي للمزيد من الإيضاح: <?php $string = "This is a @str string for a search"; // ستُطبَع الكلمة search // الجزء من السلسلة النصية التي تبدأ بالقسم sea echo strstr($string, 'sea').'</br>'; // ستُطبَع الكلمة earch // الجزء من السلسلة النصية التي تبدأ بالقسم ear echo strstr($string, 'ear').'</br>'; // سيُطبَع الرقم 8 // الذي هو موضع أول حرف 'a' // تذكر أنَّ العد يبدأ من الصفر وليس الواحد echo strpos($string, 'a').'</br>'; // سيُطبَع الرقم 30 // الذي هو موضع آخر حرف 'a' echo strrpos($string, 'a').'</br>'; // سيُطبَع الرقم 3 // عدد أحرف 'a' في السلسلة النصية echo substr_count($string, 'a').'</br>'; // ستُطبَع الجملة @str string for a search // التي تكون بعد محرف @ (بما فيها محرف @) echo strpbrk($string, '@').'</br>'; ?> الاستبدال في السلاسل النصية str_replace(): استبدال جميع أماكن ورود النص الذي نبحث عنه في السلسلة النصية. substr_replace(): استبدال القسم المُحدَّد من السلسلة الهدف بسلسلةٍ أخرى. strtr(): استبدال محارف معيّنة في السلسلة الهدف بمحارف أخرى. لنلقِ الآن نظرةً على كل دالةٍ على حدة. الدالة str_replace() تأخذ هذه الدالة ثلاثة وسائط: أولها هو السلسلة التي سنبحث عنها، وثانيها هي السلسلة التي سيتم الاستبدال بها، وثالثها هي السلسلة التي سنبحث فيها. وستعيد هذه الدالة نسخةً من السلسلة الأصلية مع استبدال جميع أماكن ورود السلسلة التي يتم البحث عنها. هذا مثالٌ عنها: <?php $myString = "It was the best of times, it was the worst of times,"; // الناتج: "It was the best of bananas, it was the worst of bananas," echo str_replace( "times", "bananas", $myString ); ?> إن أردت أن تعرف عدد مرات استبدال السلسلة التي يتم البحث عنها، فمرِّر وسيطًا رابعًا اختيارًا، وسيُسنَد إليه عدد مرات الاستبدال: <?php $myString = "It was the best of times, it was the worst of times,"; // الناتج: "It was the best of bananas, it was the worst of bananas," echo str_replace( "times", "bananas", $myString, $num ) . "<br/>"; // الناتج: "The text was replaced 2 times." echo "The text was replaced $num times"; ?> الدالة substr_replace() في حين أنَّ الدالة str_replace() تبحث عن سلسلة نصيّة معينة لاستبدالها، لكن الدالة substr_replace() تستبدل جزءًا مُحدَّدًا من السلسلة الهدف؛ عليك تمرير ثلاثة وسائط لاستعمالها: السلسلة الهدف التي ستُجرى عليها عملية الاستبدال، والنص الذي سيتم وضعه بدلًا من السلسلة المُستبدَلة، والفهرس (index، أي المكان) الذي ستبدأ منه عملية الاستبدال. تستبدل الدالة subsrt_replace() جميع المحارف من نقطة البداية إلى نهاية السلسلة النصية، وتعيد نسخةً مُعدَّلةً من السلسلة (أي أنَّ السلسلة الأصلية ستبقى على حالها دون أن يُعدَّل فيها شيء)؛ يوضِّح هذا المثال طريقة عمل الدالة substr_replace(): <?php $myString = "It was the best of times, it was the worst of times,"; // الناتج: "It was the bananas" echo substr_replace( $myString, "bananas", 11 ); ?> يمكنك أن تلاحظ أنَّ الشيفرة السابقة استبدلت جميع محتويات السلسلة النصية الأصلية بدءًا من الفهرس index) 11) إلى النهاية بالنص "bananas"؛ إن لم تكن تريد استبدال كل النص من نقطة البداية إلى نهاية السلسلة النصية، فيمكنك تحديد وسيط رابع اختياري يحتوي عدد المحارف التي ستُستبدل: <?php $myString = "It was the best of times, it was the worst of times,"; // الناتج: "It was the best of bananas, it was the worst of times," echo substr_replace( $myString, "bananas", 19, 5 ); ?> الدالة strtr() يمكنك أيضًا استخدام الدالة srttr() لاستبدال سلاسل نصية بسلاسل نصية أخرى، عوضًا عن استبدال المحارف بمحارف فقط. عليك تمرير وسيطين لفعل ذلك: السلسلة التي تريد تغييرها، ومصفوفة (array) بأزواج «المفتاح/القيمة» حيث كل «مفتاح» يُمثِّل قيمة السلسلة النصية التي سيتم البحث عنها، وكل قيمة مرتبطة بذاك المفتاح هي السلسلة النصيّة التي ستستبدل تلك المُطابَقة. سنشرح المصفوفات في درسٍ لاحق. التعامل مع حالات الأحرف ستأخذ الدوال الآتية وسيطًا وحيدًا الذي هو سلسلةٌ نصيّةٌ؛ ما رأيك أن تتدرب عليها وأن تجربها بنفسك. ()strtolower: جعل كل أحرف السلسلة النصية بأحرفٍ ذات الحالة الصغيرة (lowercase) strtoupper(): جعل كل أحرف السلسلة النصية بأحرفٍ ذات الحالة الكبيرة (uppercase) ucfirst(): جعل أول حرف من السلسلة النصية حرفًا بالحالة الصغيرة. lcfirst(): جعل أول حرف من السلسلة النصية حرفًا بالحالة الكبيرة. ucword(): جعل أول حرف من كل كلمة في السلسلة النصية حرفًا بالحالة الكبيرة. الدوال غير الحساسة لحالة الأحرف هذه هي نسخٌ من الدوال السابقة التي لا تأخذ حالة الأحرف بعين الاعتبار أثناء عملها: strstr() stristr() strpos() stripos() strrpos() strripos() str_replace() str_ireplace() تمرين قد تحتاج إلى عرض البريد الإلكتروني للأشخاص الذين يضيفون تعليقات في موقعك، لكنك لا تريد أن تُرسَل إليهم رسائل عشوائية… اكتب برنامجًا يبدِّل رمز @ في البريد الإلكتروني إلى [at]، والنقطة في آخر العنوان إلى [dot] أي أنَّ «user.name@domain.com» سيُصبِح «user.name [at] domain [dot] com». (للمساعدة، انظر إلى صفحة دليل strstr في المصادر). المصادر مقال Strings in PHP part-1 لصاحبه Harish Kumar. صفحات Strings ،strstr ،strpos و str_replace، وغيرها.
-
- السلاسل النصية
- php
-
(و 1 أكثر)
موسوم في: