تحويل متعددة الأبعاد مجموعة متعددة الكائن القياسية مجموعة متعددة الأبعاد في PHP

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

  •  05-07-2019
  •  | 
  •  

سؤال

ولدي مجموعة متعددة كائن متعدد الأبعاد من استدعاء دالة simplexml_import_dom().

وشريحة من مقطع واحد من مجموعة:

[Price] => SimpleXMLElement Object
(
    [Prices] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [MType] => A
                            [PType] => R

وهذا يسبب لي قدرا كبيرا من المشاكل عند محاولة قراءة الأشياء المتداخلة. لقد حاولت أن يتكرر خلال مجموعة باستخدام get_object_vars() متعددة ولكن بسبب عمق وموقع الكائنات المتداخلة يتغير باستمرار لم أكن قادرة على تحقيق نتائج مرغوبة.

هل PHP تحتوي على الوظيفة التي لم أكن قادرة على العثور على تحويل متعددة الأبعاد مجموعة متعددة الكائن إلى مجموعة قياسية متعددة الأبعاد؟ أو لديه أي حل هذه المشكلة من قبل؟

وشكرا لمساعدتكم!

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

المحلول

وغالبا ما يتم طرح السؤال، ولكن هناك مسألة أساسية لابد من معالجتها على أساس كل حالة على حدة عند تحويل شجرة XML إلى صفيف، الذي يجعل مقاس واحد يناسب الجميع طريقة المستحيل: كيف هل تفرق العقد من سمات؟

وعلى سبيل المثال، كيف يمكن تحويل هذه XML إلى صفيف:

<node val="attr"><val>child</val></node>

وأيضا، عقدة يمكن أن يكون أي عدد من الأطفال الذين يعانون من نفس الاسم، والتي لا يمكن أن تحاكي مع مجموعة النقابي.

وقصة قصيرة طويلة، سيكون لديك لسلق الحل الخاص بك. انطلاقا من الإخراج، فإنه ننظر بشيء من هذا القبيل:

$arr = array();
foreach ($Price->Prices as $Prices)
{
    $tmp = array();

    foreach ($Prices->attributes() as $k => $v)
    {
        $tmp[$k] = (string) $v;
    }

    $arr[] = $tmp;
}

إذا لم يكن هذا ما كنت تبحث عنه، يرجى تعديل سؤالك وإضافة مثالا للوثيقة المصدر (XML) فضلا عن النتيجة المتوقعة (مجموعة).

نصائح أخرى

هل أنت على علم بأن هذه الكائنات لها ظائف التي يمكنك استخدامها؟ جرب ما يلي:

foreach ($simpleXmlObject->children() as $element) {
    echo $element->getName();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top