"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني استرداد جميع العقد الفرعية والحفيدة والعقد التابعة ضمن العقدة الأصلية باستخدام PHP مع نتائج استعلام MySQL؟

كيف يمكنني استرداد جميع العقد الفرعية والحفيدة والعقد التابعة ضمن العقدة الأصلية باستخدام PHP مع نتائج استعلام MySQL؟

تم النشر بتاريخ 2024-11-17
تصفح:742

How do I retrieve all child, grandchild, and descendant nodes under a parent node using PHP with MySQL query results?

احصل على جميع العقد التابعة، والحفيد، وما إلى ذلك. العقد الموجودة ضمن الأصل باستخدام PHP مع نتائج استعلام MySQL

العدد الأصلي:

يعد استرداد كافة العقد التابعة والحفيد والعقد التابعة اللاحقة المرتبطة بالعقدة الأصلية مهمة شائعة عند العمل مع هياكل البيانات الهرمية. تنشأ هذه المشكلة في السيناريوهات التي تستخدم فيها جداول قاعدة البيانات نموذج قائمة مجاورة لتنظيم البيانات.

النهج باستخدام العودية:

لمعالجة هذه المشكلة، أثبت العودية فعاليته يقترب. فيما يلي شرح تفصيلي لكيفية استخدام التكرار لتحقيق هذا الهدف:

1. إنشاء وظيفة أساسية:

الوظيفة العودية هي الوظيفة التي تستدعي نفسها لحل مشكلة وغالبًا ما تستخدم في السيناريوهات التي تتضمن هياكل بيانات هرمية أو متداخلة. في هذه الحالة، سيتم تسمية وظيفتنا الأساسية fetch_recursive.

2. تحديد معايير المكالمات العودية:

ضمن fetch_recursive، هناك شرطان أساسيان يحددان متى يتم إجراء المكالمات العودية:

  • تم العثور على العقدة الأصلية: عندما العقدة الحالية التي يتم تقييمها هي العقدة الأصلية التي نهتم بها (استنادًا إلى المعرف المقدم).
  • تم العثور على العقدة الفرعية: عندما تحتوي العقدة الحالية على معرف أصل يطابق معرف العقدة الأصلية .

3. إنشاء مصفوفة النتائج:

في كل مرة يتم فيها إجراء مكالمة متكررة، ستقوم الوظيفة بملء مصفوفة النتائج بالبيانات ذات الصلة من العقدة الحالية. سوف تنمو هذه المصفوفة بشكل متكرر حيث أن النداءات العودية تجتاز بنية الشجرة.

4. البحث بشكل متكرر عن العقد الفرعية:

إذا كانت العقدة الحالية تحتوي على أي عقد فرعية (تم تحديدها من خلال وجود خاصية فرعية)، فسيتم إجراء استدعاء متكرر آخر لاسترداد تلك العقد الفرعية. تستمر هذه العملية حتى يتم التقاط جميع العقد التابعة للعقدة الأصلية.

وظائف إضافية:

1. التعامل مع الأحفاد والأحفاد:

تضمن الطبيعة التكرارية لـ fetch_recursive أنها ستجتاز التسلسل الهرمي تلقائيًا ولا تسترجع العقد الفرعية فحسب، بل أيضًا الأحفاد والأحفاد اللاحقين.

2 . توحيد النتائج:

بعد اكتمال جميع الاستدعاءات العودية، تقوم الدالة بإرجاع مصفوفة واحدة شاملة تحتوي على جميع العقد التابعة ضمن العقدة الأصلية المحددة.

تنفيذ الكود:

function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array())
{
    foreach($src_arr as $row)
    {
        if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid)
        {
            $rowdata = array();
            foreach($row as $k => $v)
                $rowdata[$k] = $v;
            $cats[] = $rowdata;
            if($row['parent_id'] == $currentid)
                $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true));
        }
    }
    return $cats;
}

الاستخدام:

للاستفادة من وظيفة fetch_recursive، ما عليك سوى تمرير مصفوفة البيانات الأصلية (في هذه الحالة، $data) ومعرف العقدة التي قمت منها تريد استرداد الأحفاد. على سبيل المثال، لاسترداد جميع العقد الفرعية والحفيدة والعقد التابعة ضمن العقدة 3:

$list = fetch_recursive($data, 3);

سيؤدي هذا إلى ملء متغير القائمة $ بمصفوفة تحتوي على جميع العقد ذات الصلة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3