Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这是上帝杀死猫的原因吗?_Php_File_Foreach - Fatal编程技术网

Php 这是上帝杀死猫的原因吗?

Php 这是上帝杀死猫的原因吗?,php,file,foreach,Php,File,Foreach,取自 这是不是也有类似的杀小猫的代码 foreach (file("longFile.txt") as $line) { // ouch! Kitten killed } ? 对于那些不知道我在说什么的人: PHP是否每次转到文件的下一行时都会得到longFile.txt?谈论这个代码: foreach (file("longFile.txt") as $line) { // something } 在链接的问题中,for循环在每次迭代时调用count,从而导致性能下

取自

这是不是也有类似的杀小猫的代码

foreach (file("longFile.txt") as $line) {
    // ouch! Kitten killed
}
?

对于那些不知道我在说什么的人:

PHP是否每次转到文件的下一行时都会得到longFile.txt?谈论这个代码:

foreach (file("longFile.txt") as $line) {
        // something
}

在链接的问题中,
for
循环在每次迭代时调用
count
,从而导致性能下降
foreach
使用内部指针迭代传递给它的数组


在您的示例中,
file()
将被调用一次,生成的数组将传递给
foreach
,foreach将对其进行迭代,从而保存小猫。卡图尔迪快乐

它不应该杀死任何小猫,因为为了让PHP获得文件的下一行,它必须知道文件指针的位置,因为上一行被删除了。您只是在推进迭代器,迭代器维护对文件对象的引用

而且,像这样打开一个文件是不好的做法;您应该有一个变量来存储它,并在完成后关闭它。

该文件真的很大吗?考虑:

foreach(new SplFileObject($path) as $line) {
    // neither kill puppies nor kittens
}
foreach
始终在具体迭代器上工作。如果传递的是
数组

除非引用了数组,否则foreach操作的是指定数组的副本,而不是数组本身

因此,每次
foreach
向前移动时,都不会执行nor
array
或函数调用


相关:

您想使用无用设备展开循环:。在每次迭代中不使用count()的情况下,这将比foreach和for循环更快,比串联和rtrim字符串更快,但与使用infrade()相同。

否。小猫死亡的原因有很多,但foreach循环不是其中之一。

是的,我知道,但是在我之前的问题中,有人回答了这段代码。除非我对PHP的了解有很大的缺陷,否则从概念上讲,
foreach
循环就是
for
循环,将迭代器推进到语句的左侧。按照这个逻辑,它不应该谋杀猫科动物。您可以自己验证这一点,方法是在代码运行时检查文件句柄的数量。文件在
file()
返回数组之前关闭。最多它会使用大量的记忆来杀死小狗,而不是小猫。两个都做,善待动物组织就会对你大发雷霆。@ChetSimpson:那么你认为这是在屠杀动物吗(与(){}循环和count()相同?在第一种情况下杀死kitten的区别在哪里(链接答案)?因为它是foreach(){}而不是(){}或者因为文件()而不是count()?在链接问题中,
for
循环在每次迭代时调用
count
会导致性能下降。
foreach
使用内部指针迭代传递给它的数组。这就像给for循环一个catnip。uff,小狗和小猫都被救了:)Caturday快乐!实际上,转到下一行文件比将其完全加载到内存要好,对吗?请参阅我的答案如何使用PHP实现这一点。