متكرر التكرار الطفل الأخير
سؤال
أتكرر من خلال مجموعة متعددة الأبعاد مع متكرر وترغب في أن أكون قادرًا على معرفة ما إذا كان العنصر الحالي هو آخر طفل لعمقه. فكرت في هذا:
$iterator = new RecursiveIteratorIterator($array,
RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $val) {
$next = clone $iterator;
$next->next();
$lastChild = ($next->getDepth() < $iterator->getDepth());
}
لكن المتكرر يقول إنه ليس مستنسخًا.
المحلول
عبارة "الطفل الأخير من عمقها" ليست واضحة بشكل خاص. هل يمكنك توضيح ما تعنيه بالضبط ؛ الاستخدام المقصود لهذا؟
إذا كنت تقصد ، بكل بساطة ، أن العمق سيتغير بعد العنصر الحالي ، ثم (Recursive)CachingIterator
لديه مفيد hasNext
طريقة لتحديد ما إذا كان لدى التكرار أي عناصر أخرى. لإعطاء مثال مخفي مماثل لتلك الموجودة في السؤال:
$array = array(
range(1,6),
range(7,8),
'foo' => range(1,3),
'bar' => range(4,5),
);
$rit = new RecursiveArrayIterator($array);
$iterator = new RecursiveIteratorIterator(
new RecursiveCachingIterator($rit),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($iterator as $val) {
$lastChild = !$iterator->hasNext();
if ($lastChild) {
echo "$val is the last child!\n";
}
}
المخرجات:
6 is the last child!
8 is the last child!
3 is the last child!
5 is the last child!
لا تنتمي إلى StackOverflow