Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

المرور عبر العناصر باستخدام '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 مختلفة من دون تضمين أي قيم ثابتة داخلها.

challenge icon

التحدي

سهل

ستتلقى مُدخلين: قائمة مفصولة بـ 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";
}
?>
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم PHP عبر الإنترنت