تخطَّ إلى المحتوى

🐘 شرح PHP

فرز المصفوفات ودوالها البرمجية

الدرس 26 من 29· ⏱ 2 دقائق قراءة· 🗓 آخر تحديث: ٢١ يوليو ٢٠٢٦

دوال الفرز الأساسية

<?php
$nums = [5, 3, 8, 1];

sort($nums);     // تصاعدي، يعيد ترقيم الفهارس: [1, 3, 5, 8]
rsort($nums);    // تنازلي، يعيد ترقيم الفهارس: [8, 5, 3, 1]
?>

للمصفوفات الترابطية التي تريد الحفاظ على ربط المفتاح بالقيمة بعد الفرز:

<?php
$ages = ["سارة" => 22, "أحمد" => 30, "ليان" => 18];

asort($ages);    // فرز حسب القيمة، يحافظ على المفاتيح
ksort($ages);    // فرز حسب المفتاح (أبجديًا)
?>
الدالةتفرز حسبتحافظ على المفاتيح؟
sort / rsortالقيمة❌ (ترقيم جديد)
asort / arsortالقيمة
ksort / krsortالمفتاح

فرز مخصّص بـ usort

عندما يكون الترتيب الافتراضي غير كافٍ (مثل فرز مصفوفة من المصفوفات الترابطية)، مرّر دالة مقارنة تُرجع رقمًا سالبًا أو صفرًا أو موجبًا:

<?php
$users = [
    ["name" => "سارة", "age" => 22],
    ["name" => "أحمد", "age" => 30],
    ["name" => "ليان", "age" => 18],
];

usort($users, function ($a, $b) {
    return $a["age"] <=> $b["age"];   // عامل السفينة الفضائية
});

foreach ($users as $u) {
    echo "{$u['name']}: {$u['age']}\n";
}
// ليان: 18 / سارة: 22 / أحمد: 30
?>

💡 usort تعيد ترقيم الفهارس دائمًا. لفرز مصفوفة ترابطية مع الحفاظ على مفاتيحها استخدم uasort بنفس الفكرة.

array_map: تحويل كل عنصر

تُطبّق دالة على كل عنصر وتُرجع مصفوفة جديدة بنفس الحجم:

<?php
$prices = [100, 250, 80];

$withTax = array_map(fn($p) => $p * 1.15, $prices);
print_r($withTax);   // [115, 287.5, 92]
?>

array_filter: تصفية العناصر

تُبقي فقط العناصر التي تُرجع الدالة true لأجلها، وتحافظ على المفاتيح الأصلية (قد تترك فجوات في الترقيم):

<?php
$nums = [1, 2, 3, 4, 5, 6];

$even = array_filter($nums, fn($n) => $n % 2 === 0);
print_r($even);          // [1 => 2, 3 => 4, 5 => 6]
print_r(array_values($even)); // [2, 4, 6] — إعادة ترقيم إن أردت
?>

array_reduce: تجميع النتيجة في قيمة واحدة

تمرّ على العناصر وتبني "قيمة متراكمة" (carry) واحدة، بدءًا من قيمة ابتدائية:

<?php
$cart = [
    ["name" => "كتاب", "price" => 40],
    ["name" => "قلم", "price" => 5],
];

$total = array_reduce(
    $cart,
    fn($carry, $item) => $carry + $item["price"],
    0   // القيمة الابتدائية
);

echo $total;   // 45
?>

أخطاء شائعة

  • توقّع أن array_filter تُعيد ترقيم الفهارس تلقائيًا — استخدم array_values() صراحة إن أردت ذلك.
  • نسيان القيمة الابتدائية في array_reduce مع مصفوفة فارغة، فتُرجع null بدل الصفر أو النص الفارغ المتوقّع.
  • استخدام sort على مصفوفة ترابطية فتفقد أسماء مفاتيحها — استخدم asort/ksort بدلًا منها.

🎯 التالي: ميزات PHP 8 الحديثة.

شرح فرز المصفوفات ودوالها البرمجية — PHP بالعربي
فرز المصفوفات ودوالها البرمجيةPHP بالعربي · The Code Fix

📚 لمزيد من التعمّق في PHP، راجِع التوثيق الرسمي لـ PHP.

هل كان هذا الدرس مفيدًا؟