PHP 数组通过引用传递?

PHP array passed by reference?

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

我们有一个配置并安装了索引搜索的 TYPO3 网站。我们使用爬虫扩展爬取记录(~60000)。一切都已配置且 运行 正常,但我们发现某些记录未出现在搜索结果中。

我调试了TYPO3代码,发现在index_rel table.

中有些词与其记录无关

我发现,当 运行 代码进入方法时 indexTypo3PageContent() on line 573 the method checkWordList() 被调用,并将单词数组作为参数传递。在方法内部有一些数组值的未设置。这是错误的地方,因为如果我是对的,数组是按值传递的,但是方法 checkWordList() 之外的数组已更改,单词更少。因此有些词不会被反向索引到它的记录。

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

上使用 PHP 5.5

如果有人能告诉我发生了什么,我将不胜感激。

无论如何,我正在 TYPO3 错误系统上发布错误。

最佳,

B.

数组确实是按值传递的(或者正如一些人指出的那样,如果它们没有在函数或方法中被修改,请参阅上面的 Rohit 评论)。

我以为数组不一样,但其实不是。那只是疲劳。深夜调试效率不高。

无论如何,我在深入研究代码后发现了问题。我正在使用 indexed_search.

的 TYPO3 4 LTS 版本

方法indexAnalyze of the indexer calls two other methods: analyzeHeaderInfo and analyzeBody. Both methods are almost identical except that analyzeHeaderInfo does not set first (first occurrence) which is actually an array index. Then in the method submitWords,当先用unset进行查询时,MySQL抱怨first为NULL。因此不进行插入。由于代码清理,这不会发生在较新的版本上。正如在代码提供的 link 中看到的那样,有一个类型转换为 int,因此如果 first 未设置,它将为零而不是 null。人们仍然可以讨论第一次出现等于零的每个元数据的语义,但那是另一回事了。

希望这对使用旧 indexed_search TYPO3 的人有所帮助。 ;-)