声明空数组,填充并迭代麻烦 - PHP

时间:2009-12-22 14:32:36

标签: php arrays console

我写了一个脚本来阅读Netflix目录并填充我的数据库。 一切都很好用作网络剧本(超时除外)所以我转移到直接从控制台调用

我注意到一些奇怪的东西,比如__construct()不再被调用(但是使用类名作为函数很容易解决。

现在我无法让我的数组像以前一样工作,这是一般的想法。

(实际上我已经尝试过几种组合,所以我会分享它们)

1 - 这在Web脚本版本中工作正常,不再适用于从控制台调用

//declare empty
var $genreArray=array();

//later I add values one at a time as the XML is parsed
array_push($this->genreArray,$attrs['term']);

//after I have parsed an entire "title" element, I iterate the array
foreach ($this->genreArray as $value) {
    // never gets called - array seen as empty
    $this->db->linkGenre($value,$this->title_uid);
}

2 - 所以我尝试了PHP手册;推荐 - 没什么

//declare empty
var $genreArray=array();

//later I add values one at a time as the XML is parsed
$this->genreArray[]=$attrs['term'];

//after I have parsed an entire "title" element, I iterate the array
foreach ($this->genreArray as $value) {
    // never gets called - array seen as empty
    $this->db->linkGenre($value,$this->title_uid);
}

3 - 所以最后我尝试手动跟踪索引

//declare empty array
var $genreArray=array();
var $gi=0;

//later I add values one at a time as the XML is parsed
$this->genreArray[$this->gi++]=$attrs['term'];

//after I have parsed an entire "title" element, I iterate the array
foreach ($this->genreArray as $value) {
    // never gets called - array seen as empty
    $this->db->linkGenre($value,$this->title_uid);
}

所以我现在完全被困住了。

有人声明空数组并通过控制台填充吗?

(所有这3个都通过网络工作 - 所以我需要一个控制台专家)


感谢您的支持,以下是要求的其他详细信息;

php -v

PHP 4.4.9(cli)(建于:2008年9月17日12:02:18) 版权所有(c)1997-2008 PHP小组 Zend Engine v1.3.0,版权所有(c)1998-2004 Zend Technologies     Zend Technologies的Zend Extension Manager v1.2.2,版权所有(c)2003-2007     使用Zend Optimizer v3.3.3,版权所有(c)1998-2007,作者:Zend Technologies


每个代码段都在单独的运行中尝试过。你有兴趣了解这门课程的哪些细节?

我使用了echo语句来验证是否按预期调用了代码。如果我通过URL点击脚本,一切都会正常开始(前几千条记录直到超时)。


没有错误被抛出,我甚至尝试添加......

error_reporting(E_ALL);
ini_set('display_errors', true);

4 个答案:

答案 0 :(得分:2)

  

我注意到一些奇怪的东西,比如__construct()不再被调用(但是使用类名作为函数很容易被重新编写。

听起来您的命令行和Web服务器PHP是不同的版本。你的CLI是PHP 4吗?函数phpversion()将告诉您CLI和Web中的版本。

您检查过错误日志吗?你没有提到它,但那将是第一个看的地方。

答案 1 :(得分:1)

  

我注意到一些奇怪的事情,比如   __construct()不再被调用(但很容易使用   类名作为函数。

这看起来很奇怪。您在Web脚本中使用的PHP版本以及控制台中的哪个版本?

键入php -v会告诉你版本。

答案 2 :(得分:0)

要避免非CLI超时,您可以执行以下操作:

set_time_limit(0);

您似乎使用var而不是public来进行类属性声明,这与您无法使用__construct()的事实一起让我猜你正在使用PHP 4,是吗?

$attrs['term']在哪里宣布?

尝试var_dump($attrs['term']);看看会发生什么。

另一个闻不到的东西是以下几行:

array_push($this->genreArray,$attrs['term']);
$this->genreArray[]=$attrs['term'];
$this->genreArray[$this->gi++]=$attrs['term'];

$attrs['term']似乎是一个数组,但你并没有循环遍历它。除非这些线条属于它自己的独立方法,否则我认为有些不对劲。

另外,您提供的代码是我们课程的一部分吗?只是为了确保..

答案 3 :(得分:0)

尝试从var

中删除var $genreArray=array();

我遇到了同样的问题并删除var修复了它。

相关问题