مقدمة في الخوارزميات وهياكل البيانات بلغة PHP
PHP هي واحدة من أكثر اللغات شيوعًا لتطوير الويب، لكن العديد من المطورين يقللون من أهمية فهم الخوارزميات وهياكل البيانات. معرفة هذه المفاهيم الأساسية تتيح لك كتابة كود أكثر كفاءة وسرعة وقابلية للتوسع. في هذا المقال، سنستعرض الخوارزميات وهياكل البيانات الرئيسية بلغة PHP مع أمثلة عملية ستساعدك على تحسين مشاريعك.
بغض النظر عما إذا كنت تعمل مع أنظمة إدارة المحتوى (CMS)، أو الأطر (frameworks)، أو تقوم ببناء واجهات برمجة التطبيقات (API)، فإن الخوارزميات وهياكل البيانات بلغة PHP هي أدوات تؤثر بشكل مباشر على أداء التطبيق. لنبدأ بالأساسيات.
هياكل البيانات الأساسية في PHP
المصفوفات: أداة متعددة الاستخدامات
في PHP، المصفوفات هي أكثر هياكل البيانات مرونة. يمكنها العمل كقوائم، ومكدسات، وطوابير، وحتى جداول تجزئة. دعنا نستعرض العمليات القياسية:
<?php// إنشاء مصفوفة$numbers = [5, 3, 8, 1, 9];
// إضافة عنصر إلى النهاية$numbers[] = 7;
// حذف آخر عنصر (كمكدس)$last = array_pop($numbers); // 7
// حذف أول عنصر (كطابور)$first = array_shift($numbers); // 5
// البحث عن عنصر$index = array_search(8, $numbers); // 1
// الفرزsort($numbers);print_r($numbers); // [1, 3, 8, 9]?>من المهم أن تتذكر: الدوال المضمنة في PHP للمصفوفات محسّنة على مستوى لغة C، لذا استخدمها للعمليات الأساسية بدلاً من كتابة تطبيقاتك الخاصة.
المكدس (Stack) في PHP
يعمل المكدس وفق مبدأ LIFO (Last In, First Out). التطبيق في PHP باستخدام SplStack:
<?php$stack = new SplStack();$stack->push('الأول');$stack->push('الثاني');$stack->push('الثالث');
echo $stack->pop(); // 'الثالث'echo $stack->pop(); // 'الثاني'?>المكدسات مفيدة للتحقق من الأقواس في الكود، وتنفيذ وظيفة "التراجع" (undo)، أو اجتياز الرسوم البيانية بالعمق (DFS).
الطابور (Queue) في PHP
يعمل الطابور وفق مبدأ FIFO (First In, First Out). استخدم SplQueue:
<?php$queue = new SplQueue();$queue->enqueue('مهمة 1');$queue->enqueue('مهمة 2');$queue->enqueue('مهمة 3');
echo $queue->dequeue(); // 'مهمة 1'echo $queue->dequeue(); // 'مهمة 2'?>الطوابير لا غنى عنها عند معالجة المهام في الخلفية، والعمل مع طوابير الرسائل (RabbitMQ, Redis)، وتنفيذ BFS (الاجتياز بالعرض).
خوارزميات الفرز في PHP
الفرز السريع (Quick Sort)
واحدة من أكثر الخوارزميات فعالية. التطبيق في PHP:
<?phpfunction quickSort(array $arr): array { if (count($arr) <= 1) { return $arr; } $pivot = $arr[0]; $left = $right = []; for ($i = 1; $i < count($arr); $i++) { if ($arr[$i] < $pivot) { $left[] = $arr[$i]; } else { $right[] = $arr[$i]; } } return array_merge( quickSort($left), [$pivot], quickSort($right) );}
$data = [3, 7, 1, 9, 2, 5];print_r(quickSort($data)); // [1, 2, 3, 5, 7, 9]?>التعقيد: O(n log n) في المتوسط، O(n²) في أسوأ الحالات. للمصفوفات الكبيرة، استخدم الدالة المضمنة sort() — فهي أسرع.
الفرز الفقاعي (Bubble Sort)
خوارزمية بسيطة ولكنها بطيئة. مفيدة للأغراض التعليمية والمصفوفات الصغيرة:
<?phpfunction bubbleSort(array $arr): array { $n = count($arr); for ($i = 0; $i < $n - 1; $i++) { for ($j = 0; $j < $n - $i - 1; $j++) { if ($arr[$j] > $arr[$j + 1]) { [$arr[$j], $arr[$j + 1]] = [$arr[$j + 1], $arr[$j]]; } } } return $arr;}?>التعقيد: O(n²). لا تستخدمه في بيئة الإنتاج — فهو