دوال الفرز الأساسية
<?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 الحديثة.