سؤال

في PHP SPLFILEOBJECT يسمح بمعالجة الملفات كمثقت.

ومع ذلك، هناك سلوك لا أفهمه. عند الاتصال التالي () على الكائن، فهذا يزيد قيمة المفتاح () ولكنه لا يدفع الخط في الملف ما لم تستدعي الحالي () مع كل تكرار. تذكر Docs SPL هذا المفتاح () إرجاع رقم الخط الحالي.

رمز لإعادة إنتاج:

test.txt.

0
1
2
3

Iterator.php.

<?php
$fi = new SPLFileObject('test.txt');
echo $fi->current() . "\n"; // prints 0
echo $fi->key() . "\n"; //prints 0
$fi->next();
$fi->next();
$fi->next();
echo $fi->current() . "\n"; // prints 1, expecting 3
echo $fi->key() . "\n"; //prints 3

من ما أستطيع أن أرى، فإن التالي لا يعمل في هذا القسم. ستقدم إذا كنت تستخدمه بهذه الطريقة:

ITERATOR_FIX.PHP.

<?php
$fi = new SPLFileObject('test.txt');
echo $fi->current() . "\n"; // prints 0
echo $fi->key() . "\n"; //prints 0
$fi->next();
$fi->current();
$fi->next();
$fi->current();
$fi->next();
echo $fi->current() . "\n"; // prints 3 as expected
echo $fi->key() . "\n"; //prints 3

هل يمكن لأي شخص أن يفسر ما إذا كان هذا خطأ أو إذا كان هو السلوك المقصود؟

نظر إلى منتديات Google و PHP ولم يرد أي شيء. شكرا لك مقدما.

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

المحلول

SPLFILEOBJECT :: NEXT () فقط له تأثير إذا كان read_ahead. تم تعيين العلم.

$fi = new SPLFileObject('test.txt');
$fi->setFlags(SPLFileObject::READ_AHEAD);

نصائح أخرى

حسنا، في أي حال، لماذا لا تستخدمه مع foreach، لأنه ما هو مخصص له؟

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