- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 PHP 中,SPLFileObject 允许将文件视为迭代器。
但是有一个行为我不明白。当您在对象上调用 next() 时,它会增加 key() 的值,但不会前进文件中的行,除非您在每次迭代时调用 current()。 SPL 文档声明 key() 返回当前行号。
重现代码:
测试.txt
0
1
2
3
迭代器.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
据我所知,next 不适用于此部分。如果我这样使用它会进步:
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);
关于php - SPLFileObject next() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504927/
是否可以取消文件与 SplFileObject 的链接? 我没有看到关闭底层资源的方法,并且文件句柄是私有(private)的,因此不能以此为目标扩展 SplFileObject。 有什么解决方法吗?
我正在使用 SPLFile 类创建一个 CSV 文件: $z=new SplFileObject('/tmp/test.csv.gz','w'); $arr=[['a','b','c'],[1,2,3
我正在使用 SPLFile 类创建一个 CSV 文件: $z=new SplFileObject('/tmp/test.csv.gz','w'); $arr=[['a','b','c'],[1,2,3
$file = new SplFileObject('/path/to/file.txt'); 如何使用 SplFileObject 查找文件中的行数? 最佳答案 iterator_count 和使用
我正在使用 SplFileInfo 和 SplFileObject 在 PHP 中处理文件。但是当我尝试“重新打开”一个文件时,它对我大喊: SplFileObject::__construct(f
在 PHP 中,SPLFileObject 允许将文件视为迭代器。 但是有一个行为我不明白。当您在对象上调用 next() 时,它会增加 key() 的值,但不会前进文件中的行,除非您在每次迭代时调用
我正在尝试使用 SplFileObject() 逐行编辑文件。我可以选择要编辑的文件所在的行。但是我该如何向该行写入一个 $string 呢? 这是我获取该行的代码: seek(9999);
我有两行数据文件(两行仅用于我的示例,实际上,该文件可以包含数百万行)并且我使用 SplFileObject 和 LimitIterator 进行偏移。但这种组合在某些情况下有奇怪的行为: $offs
我正在尝试在 symfony2 中实现存折网络服务并遵循这个 passbook bundle,我的 Controller 看起来像这样 if ($form->isValid()) {
PHP5 引入了面向对象的文件包装器 SplFileObject。我想我刚刚发现为什么几乎没有人使用它。它纯粹是面向行的,没有 fread() 方法——相应的 frwite 似乎暗示了这一点。 所以现
例如: $contents = file_get_contents(image.png); 是否可以从 $contents 创建一个 SplFileObject 对象? 谢谢! 最佳答案 php 有一
我有一个 TXT 文件,我需要打开它并在末尾添加一个新行。我正在使用 SplFileObject: $file = new SplFileObject( $this->fileName, 'w' );
我编写了一个类,而不是扩展 SplFileObject 以打开 CSV 并具有关联数组。它有效,但如果 csv 文件使用 CR 换行符则无效。 我知道你可以像这样转换字符串换行符: $string =
在 PHP 中使用 fopen 相对于 SplFileObject 的优缺点是什么? 据我所知,SplFileObject 会在适用的情况下抛出异常,这在使用 try...catch 进行错误处理时很
在问这个问题之前,我已经阅读了文档并广泛搜索了这个网站。 $file = new SplFileObject("/var/www/qacentre/compliance/compliance.csv"
使用 PHP 遍历 csv 文件时 SplFileObject和 READ_CSV 标志我得到一个带有 null 值的额外行。有没有办法自动删除此行? $file = new SplFileObjec
是否有与 PHP 的 SplFileObject 相同的手写 class 或 VC++ 插件可用? 请看问题https://stackoverflow.com/questions/10650864/f
当读取 csv 文件中的特定行时,我尝试将 SplFileObject::fseek 与 fgetcsv 一起使用。 为了读取第 2 行(例如),我执行了 fseek(1) 并使用 fgetcsv 读
我一直在制作一个网站,该网站具有基于访问 .txt 文件的 php 用户帐户登录系统。我最初在一个免费的网络托管服务上测试了大部分代码并使用户帐户登录系统正常运行,但是当我试图将它移到我自己的个人 a
我是一名优秀的程序员,十分优秀!