كيف يمكنك إنشاء صفيف متعدد الأبعاد من بيانات SQL المخزنة بشكل هرمي باستخدام طريقة قائمة المجاورة؟
-
16-09-2019 - |
سؤال
بيانات هرمية من 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 هي متناثرة ولكنها توفر بعض الهياكل الجيدة والواجهات والفئات. بعض البرامج التعليمية الجيدة موجودة على شبكة الإنترنت حول هذا الموضوع.