لماذا التكرار على ArrayIterator ينتهي بحلقة لا نهاية لها؟
-
13-12-2019 - |
سؤال
المصفوفة الموجودة في الكود الخاص بي كبيرة جدًا لذا قمت بلصقها في Pastebin. http://pastebin.com/6tviT2Xj
لا أفهم لماذا أحصل على حلقة لا نهاية لها
منطق هذا البرنامج النصي هو:
$it = new ArrayIterator($options);
while($it->valid()) {
print $it->key();
print $it->current();
}
المحلول
نظرا لأنك لا تتحرك أبدا في ITERATOR ( مع Arrayiterator :: Next () <) <) <) <) <) <) <) <) <) <) <) <) <) <) ).
giveacodicetagpre.نصائح أخرى
يجب عليك استخدام $it->next();
وإلا فسوف تتقلب على نفس المفتاح إلى الأبد
أنت تكرار حول العنصر الحالي، فأنت بحاجة إلى القيام بتقديم الأجيال إلى النقطة / الذهاب إلى العنصر التالي
المشكلة الرئيسية هي عدم الاستخدام $it->next();
في الخاص بك ولكن لا يزال هناك الكثير لا يمنحك الإخراج المطلوب لأنه إذا قمت بتشغيل print $it->current();
سيعود فقط Array
نظرًا لأنه لا يمكنك إخراج معلومات الصفيف باستخدام print
.
يجب أن تستخدم RecursiveArrayIterator
و RecursiveIteratorIterator
لأنك تتعامل مع مجموعة متعددة الأبعاد
للحصول على جميع القيم حاول:
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($options));
foreach ( $it as $key => $val ) {
echo $key . ":" . $val . "\n";
}
شاهد العرض التوضيحي الكامل: http://codepad.viper-7.com/UqF18q