الخوارزميات وهياكل البيانات بلغة PHP: دليل عملي

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

الخوارزميات وهياكل البيانات بلغة PHP: تطبيق عملي

\n\n

في عالم تطوير الويب، تظل PHP واحدة من أكثر اللغات شيوعًا. ومع ذلك، فإن العديد من المطورين الملمين بتركيبها اللغوي غالبًا ما يغفلون عن المفاهيم الأساسية - الخوارزميات وهياكل البيانات. إن فهم هذه المواضيع لا يحسن جودة الكود فحسب، بل يجعلك أيضًا متخصصًا أكثر تنافسية في المقابلات. في هذه المقالة، سنشرح الخوارزميات وهياكل البيانات الرئيسية بلغة PHP مع أمثلة كود حقيقية يمكنك تطبيقها فورًا في مشاريعك.

\n\n

1. هياكل البيانات الأساسية: المكدس والطابور

\n\n

المكدس والطابور هما هيكلان خطيان للبيانات يُستخدمان غالبًا في التطبيقات الحقيقية. يعمل المكدس وفق مبدأ LIFO (آخر دخول، أول خروج)، بينما يعمل الطابور وفق مبدأ FIFO (أول دخول، أول خروج). في PHP، يمكن تنفيذهما باستخدام دوال المصفوفات المضمنة.

\n\n

تنفيذ المكدس

\n
<?php\nclass Stack {\n    private $stack = [];\n\n    public function push($item) {\n        array_push($this->stack, $item);\n    }\n\n    public function pop() {\n        if ($this->isEmpty()) {\n            return null;\n        }\n        return array_pop($this->stack);\n    }\n\n    public function peek() {\n        return end($this->stack);\n    }\n\n    public function isEmpty() {\n        return empty($this->stack);\n    }\n}\n\n// مثال على الاستخدام\n$stack = new Stack();\n$stack->push("الأول");\n$stack->push("الثاني");\n$stack->push("الثالث");\necho $stack->pop(); // الثالث\necho $stack->peek(); // الثاني\n?>
\n\n

تنفيذ الطابور

\n
<?php\nclass Queue {\n    private $queue = [];\n\n    public function enqueue($item) {\n        array_push($this->queue, $item);\n    }\n\n    public function dequeue() {\n        if ($this->isEmpty()) {\n            return null;\n        }\n        return array_shift($this->queue);\n    }\n\n    public function front() {\n        return reset($this->queue);\n    }\n\n    public function isEmpty() {\n        return empty($this->queue);\n    }\n}\n\n// مثال على الاستخدام\n$queue = new Queue();\n$queue->enqueue("الأول");\n$queue->enqueue("الثاني");\n$queue->enqueue("الثالث");\necho $queue->dequeue(); // الأول\necho $queue->front();    // الثاني\n?>
\n\n

هذه الهياكل البيانات لا غنى عنها عند تنفيذ المخازن المؤقتة، وسجل الإجراءات (تراجع/إعادة)، ومعالجة المهام حسب ترتيب ورودها.

\n\n

2. خوارزميات الفرز بلغة PHP

\n\n

الفرز هو أحد أكثر العمليات شيوعًا في البرمجة. سنستعرض تطبيقين كلاسيكيين: فرز الفقاعات (للتعلم) والفرز السريع (للعمل الحقيقي).

\n\n

فرز الفقاعات (Bubble Sort)

\n
<?php\nfunction bubbleSort(&$arr) {\n    $n = count($arr);\n    for ($i = 0; $i < $n - 1; $i++) {\n        for ($j = 0; $j < $n - $i - 1; $j++) {\n            if ($arr[$j] > $arr[$j + 1]) {\n                // تبادل القيم\n                $temp = $arr[$j];\n                $arr[$j] = $arr[$j + 1];\n                $arr[$j + 1] = $temp;\n            }\n        }\n    }\n}\n\n$numbers = [64, 34, 25, 12, 22, 11, 90];\nbubbleSort($numbers);\nprint_r($numbers); // [11, 12, 22, 25, 34, 64, 90]\n?>
\n\n

التعقيد: O(n²) - غير مناسب للمصفوفات الكبيرة، لكنه يوضح المبدأ بشكل ممتاز.

\n\n

الفرز السريع (Quick Sort)

\n
<?php\nfunction quickSort($arr) {\n    if (count($arr) < 2) {\n        return $arr;\n    }\n\n    $pivot = $arr[0];\n    $left = $right = [];\n\n    for ($i = 1; $i < count($arr); $i++) {\n        if ($arr[$i] < $pivot) {\n            $left[] = $arr[$i];\n        } else {\n            $right[] = $arr[$i];\n        }\n    }\n\n    return array_merge(quickSort($left), [$pivot], quickSort($right));\n}\n\n$numbers = [3, 6, 8, 10, 1, 2, 1];\n$sorted = quickSort($numbers);\nprint_r($sorted); // [1, 1, 2, 3, 6, 8, 10]\n?>                

المدونات

توصيات الكتب