كيف يمكنك إنشاء صفيف متعدد الأبعاد من بيانات SQL المخزنة بشكل هرمي باستخدام طريقة قائمة المجاورة؟

StackOverflow https://stackoverflow.com/questions/1273972

سؤال

بيانات هرمية من SQL

قائمة المجاورة نموذج

في نموذجي لدي سلسلة من الكائنات، يتم تخزين كل منها مع معرف الوالدين. أنا أستخدم نموذج قائمة المجاورة كطريقة هرمية.

جميع الأمثلة على قائمة المجاورة ببساطة الإخراج هناك ثم. حاول أي شيء إنشاء مجموعة متعددة الأبعاد من مجموعة النتائج.

---------------
| id | parent |
---------------
| 1  | NULL   |
| 2  | 1      |
| 3  | 1      |
| 4  | 2      |
| 5  | 2      |
| 6  | 5      |
---------------

هدف

لقد قمت بإنشاء متغير صفيف في صفي يسمى "الأطفال" وتريد إضافة كائن طفل في كل مرة أجد فيها طفل من استعلام DB.

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

أشعر أنني كنت أقترب من هذه المشكلة بطريقة خاطئة؟

هل هناك طريقة أكثر ذكاء لاستخدام صفائف PHP أكثر من هذا؟

هل كانت مفيدة؟

المحلول

لا يجب أن تكون مجموعة الأطفال جزءا من الفصل؛ يمكنك دائما إنشاء شجرة مخصصة حيث تكون عقدة واحدة تحتوي على كائن وأطفالها. أنا لا أعرف PHP، لكنها ستبدو شيئا مثل:

{
    object => $row1,
    children => [
        {
            object => $row2,
            children => [ ... ],
        }, {
            object => $row3,
            children => [],
        }
    ]
}

نصائح أخرى

هل تحتاج إلى أن تكون صفيفا؟ يمكن أن يكون هناك خيار هو الحصول على كائنات تنفيذ هيكل هرمي متكرر مثل هذا واحد:

http://www.php.net/~helly/php/ext/spl/classrecursivearrayiterator.html.

يمكنك إضافة الكائنات كطفل وما زلت تسافر في الهيكل بطريقة تشبه الصفيف.

الوثائق على SPL هي متناثرة ولكنها توفر بعض الهياكل الجيدة والواجهات والفئات. بعض البرامج التعليمية الجيدة موجودة على شبكة الإنترنت حول هذا الموضوع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top