المرور عبر العناصر باستخدام 'array_walk'
جزء من قسم المنطق وتدفق التنفيذ في رحلة PHP على Coddy. الدرس 44 من 68.
تقدّم الدالة array_walk() أسلوبًا مختلفًا لمعالجة array مقارنةً بـ array_map(). فبينما تنشئ array_map() مصفوفة جديدة بقيم محوّلة، تعدّل array_walk() الـ array الأصلية مباشرةً من خلال تطبيق دالة callback على كل عنصر في موضعه.
تكون هذه function مفيدة بشكل خاص عندما تريد تغيير array الموجودة دون إنشاء نسخة. تتلقى callback التي تقدمها كل عنصر من عناصر array by reference، مما يتيح لك modify القيم الأصلية مباشرةً.
<?php
function addPrefix(&$value, $key) {
$value = "Item: " . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items أصبح الآن: ["Item: apple", "Item: banana", "Item: orange"]
?>لاحظ كيف تستخدم callback function &$value لتلقي عنصر array بالمرجع. يتيح ذلك لـ function أن تقوم بعملية modify لعنصر array الأصلي مباشرةً. يوفّر parameter الثاني $key إمكانية الوصول إلى key الخاص بالعنصر الحالي، رغم أنه ليس مطلوبًا دائمًا لإجراء تحويلات بسيطة.
تدعم array_walk() أيضًا optional argument ثالثًا يتيح لك تمرير extra data مباشرةً إلى callback function. ويُعد هذا مفيدًا عندما يعتمد التحويل على قيمة مُعرَّفة خارج array، مثل prefix أو suffix أو أي إدخال ديناميكي آخر.
عند تمرير argument ثالث إلى array_walk()، تتلقى callback function الخاصة بك إياه كمعامل ثالث:
<?php
function addCategory(&$value, $key, $category) {
$value = $category . ": " . $value;
}
$products = ["laptop", "mouse", "keyboard"];
$prefix = "Electronics";
array_walk($products, "addCategory", $prefix);
// $products is now: ["Electronics: laptop", "Electronics: mouse", "Electronics: keyboard"]
?>هنا، يتم تمرير $prefix بوصفه third argument إلى array_walk()، وتتلقاه callback باسم $category. وبهذه الطريقة، يمكنك إعادة استخدام callback function نفسها مع prefix مختلفة من دون تضمين أي قيم ثابتة داخلها.
التحدي
سهلستتلقى مُدخلين: قائمة مفصولة بـ comma من product names وcategory prefix. يحتوي المُدخل الأول على product names باعتبارها string بالتنسيق laptop,mouse,keyboard,monitor، أما المُدخل الثاني فهو نص category prefix (مثال: Electronics).
اقرأ كلا المُدخلين، وحوّل product names المفصولة بـ comma إلى array، وأنشئ callback function تضيف category prefix إلى each product name بالتنسيق "Category: ProductName"، واستخدم array_walk() مع callback function الخاصة بك لـ modify الـ original array مباشرةً، ثم اطبع each modified product name في line منفصلة.
يجب أن تستخدم callback function الخاصة بك المعامل &$value لـ modify عناصر array بالمرجع. يجب أن تقوم function بضم category prefix مع colon ومسافة، متبوعَين بـ product name.
تنسيق المُدخل:
- السطر الأول: product names مفصولة بـ comma (مثال:
laptop,mouse,keyboard,monitor) - السطر الثاني: نص category prefix (مثال:
Electronics)
Output المتوقع: طباعة each modified product name في line منفصلة بالتنسيق Category: ProductName
جرّب بنفسك
<?php
// اقرأ أسماء المنتجات المفصولة بفواصل
$products_input = trim(fgets(STDIN));
// اقرأ بادئة الفئة
$category = trim(fgets(STDIN));
// حوّل السلسلة المفصولة بفواصل إلى مصفوفة
$products = explode(',', $products_input);
// TODO: اكتب الكود الخاص بك أدناه
// أنشئ دالة رد نداء تعدّل كل اسم منتج بإضافة بادئة الفئة
// استخدم array_walk() مع دالة رد النداء الخاصة بك لتعديل المصفوفة
// أخرج كل اسم منتج معدّل في سطر منفصل
foreach ($products as $product) {
echo $product . "\n";
}
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1الدوال المتقدمة
الدوال المجهولةالـ Closures وكلمة 'use'دوال السهمدوال الـ Callbackاستخدام 'call_user_func'دوال المتغيراتالتمرير بالمرجعالدوال العوديةمراجعة: مزيج الدوال4المصفوفات متعددة الأبعاد
إنشاء مصفوفة ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادتعديل عناصر المصفوفة ثنائية الأبعادالتكرار باستخدام الحلقات المتداخلةالمصفوفات الترابطية ثنائية الأبعادمراجعة: تمرين الشبكة البسيطة2معالجة المصفوفات المتقدمة
الإضافة باستخدام 'array_push'الحذف باستخدام 'array_pop'الإضافة باستخدام 'array_unshift'الحذف باستخدام 'array_shift'دمج المصفوفات المفهرسةدمج المصفوفات الترابطيةالاستخراج باستخدام 'array_slice'القيم باستخدام 'in_array'المفاتيح باستخدام 'array_search'مراجعة: تمرين قائمة التشغيل3ترتيب المصفوفات
ترتيب المصفوفات المفهرسة تصاعدياًترتيب المصفوفات المفهرسة تنازلياًترتيب المصفوفات الترابطية حسب القيمةترتيب المصفوفات الترابطية حسب المفتاحالترتيب بالترتيب الطبيعيالترتيب المخصص باستخدام 'usort'مراجعة: ترتيب لوحة المتصدرين6دوال المصفوفات من الرتبة العليا
التحويل باستخدام 'array_map''array_map' مع دالة مخصصةالتصفية باستخدام 'array_filter''array_filter' مع دالة مخصصةالاختزال باستخدام 'array_reduce'المرور عبر العناصر باستخدام 'array_walk'ملخص: معالجة البياناتتدرّب بنفسك: مترجم PHP عبر الإنترنت