Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.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_Arrays_Typo3_Pass By Reference_Pass By Value - Fatal编程技术网

通过引用传递的PHP数组?

通过引用传递的PHP数组?,php,arrays,typo3,pass-by-reference,pass-by-value,Php,Arrays,Typo3,Pass By Reference,Pass By Value,我一直在寻找这个问题的答案,我有一个数组,但到目前为止,没有答案在这里,也没有网络 我们有一个TYPO3网站,配置并安装了索引搜索。我们使用crawler扩展来抓取记录(~60000)。一切都配置好了,运行正常,但我们看到一些记录没有出现在搜索结果上 我调试了TYPO3代码,发现有些单词与index_rel表中的记录无关 我发现,当运行的代码在第573行输入该方法时,该方法将通过作为参数传递的单词数组被调用。在该方法中有一些数组值的未设置。这就是错误的地方,因为如果我是对的,数组是按值传递的,但

我一直在寻找这个问题的答案,我有一个数组,但到目前为止,没有答案在这里,也没有网络

我们有一个TYPO3网站,配置并安装了索引搜索。我们使用crawler扩展来抓取记录(~60000)。一切都配置好了,运行正常,但我们看到一些记录没有出现在搜索结果上

我调试了TYPO3代码,发现有些单词与index_rel表中的记录无关

我发现,当运行的代码在第573行输入该方法时,该方法将通过作为参数传递的单词数组被调用。在该方法中有一些数组值的未设置。这就是错误的地方,因为如果我是对的,数组是按值传递的,但是方法checkWordList()之外的数组被更改了,单词就更少了。因此,某些单词不会反向索引到其记录

我可以更改代码。这很容易。但是我想了解这个问题。这是一个PHP错误吗?PHP数组不是按值传递的吗?我在Ubuntu上使用PHP5.5

如果有人能告诉我发生了什么,我将非常感激

不管怎样,我在TYPO3错误系统上发布了一个错误

最好的


B.

数组确实是按值传递的(或者正如一些人通过引用指出的那样,如果它们没有在函数或方法中修改,请参见上面的Rohit注释)

我认为阵列是不同的,但不是。只是疲劳。在深夜调试是没有效率的

无论如何,我在深入研究代码后发现了问题。我使用的是索引搜索的TYPO3 4 LTS版本

索引器的方法调用另外两个方法:analyzeHeaderInfo和analyzeBody。这两种方法几乎相同,只是analyzeHeaderInfo没有设置第一个(第一次出现),它实际上是一个数组索引。然后在该方法中,当使用unset first进行查询时,MySQL会抱怨first为NULL。因此,不进行插入。由于代码清理,在较新版本上不会发生这种情况。正如您在提供的代码链接中所看到的,有一个类型强制转换为int,因此,如果first未设置,它将为零且不为null。我们仍然可以讨论第一次出现等于零的每个元数据的语义,但这是另一回事


希望这能帮助使用和旧索引搜索类型3的人。;-)

这里已经回答了,非常感谢你的回答。我猜后来我在PHP中发现了一个bug,因为根据该页面上的答案,在函数内部修改数组时,数组会按值传递。然而,当PHP解析我在问题中指出的文件时,一定发生了一些事情。可能是因为unset是内部控制结构。我在发布之前尝试过这样的代码:
它的工作原理与预期的一样。该文件不存在。您在哪里检查了外部阵列?
checkWordList
方法仅用于将单词插入一个单独的表中,然后从索引表中引用该表。由于参数不是通过引用传递的,所以您所说的修改是不可能的。“我无法重现你所描述的问题。”迈克尔,我将发布一个答案。我很抱歉。那是在晚上。我很累,我正在用眼睛检查调试信息。我实际上发现了问题,将在答案中描述它。最好的