【发布时间】:2015-07-04 11:58:18
【问题描述】:
我一直在寻找这个问题的答案,我有一个数组,但到目前为止,这里和网络都没有答案。
我们有一个配置并安装了索引搜索的 TYPO3 网站。我们使用爬虫扩展来爬取记录(~60000)。一切都已配置并运行良好,但我们看到搜索结果中没有出现一些记录。
调试TYPO3代码,发现index_rel表中有些词与其记录无关。
我发现,当运行代码在第 573 行进入方法 indexTypo3PageContent() 时,将调用方法 checkWordList(),并将单词数组作为参数传递。在该方法内部,有一些数组值未设置。这是错误的地方,因为如果我是对的,数组是按值传递的,但是方法 checkWordList() 之外的数组被更改,单词更少。因此有些词不会被反向索引到它的记录中。
我可以更改代码。这很容易。但是我想了解这个问题。它是一个PHP错误吗? PHP数组不是按值传递的吗?我在 Ubuntu 上使用 PHP 5.5。
如果有人能提示正在发生的事情,我将不胜感激。
无论如何,我在 TYPO3 错误系统上发布了一个错误。
最佳,
乙。
【问题讨论】:
-
Rohit 非常感谢您的回答。我想我在 PHP 中发现了一个错误,因为根据该页面上的答案,当在函数内部修改数组时,数组是按值传递的。但是,当 PHP 解析我在问题中指出的文件时,一定会发生一些事情。也许是因为未设置在控制结构内部。我在发布之前尝试了这样的代码:
<?php error_reporting(E_ALL); ini_set('display_errors', 1); function x($array) { unset($array['a']); } $a = ['a'=>'5']; x($a); print_r($a); ?>它按预期工作。那个文件没有。 -
你在哪里检查外面的阵列?
checkWordList方法仅用于将单词插入单独的表中,然后从索引表中引用该表。由于参数不是通过引用传递的,因此没有机会进行您所说的修改。我无法重现您描述的问题。 -
@Michael,我会发布一个答案。我很抱歉。那是在晚上。我累了,我正在用眼睛检查调试信息。我实际上发现了问题,将在答案中描述它。最好的。 ;-)
标签: php arrays typo3 pass-by-reference pass-by-value