我对编程非常陌生,并且一直在试图让这个网络刮板工作2天。我简化了完整的脚本(甚至删除了所有实际的网页抓取),同时保持了原有的功能障碍。
我想代码很容易理解为受过训练的眼睛,但为了方便我会说脚本应该是:
3.b是脚本失败的地方。它没有输入值(它留空)。
我知道我正在使用没有参数的函数(完整代码包含它们),这些函数可能很糟糕,但如果没有它们,功能障碍仍然是相同的。
<?php
$scrape = new Scraper();
class Scraper
{
protected $cars = array();
function __construct()
{
$this->getcars();
foreach ($this->cars as $item) {
$item['color'] = $this->getcolor($item); // here is the fault!
}
}
private function getcars()
{
$listofcars = array('0','1','2');
foreach ($listofcars as $item) {
$this->cars[] = array('carname' => 'humvee','color' => '');
}
}
private function getcolor()
{
return 'green';
}
}
?>
答案 0 :(得分:1)
您的foreach循环未通过引用传递(您所做的任何更改都不会“粘住”)。将其更改为:
foreach ($this->cars as &$item)
修改:$this->getcolor($item);
似乎也是一个问题。您定义的getcolor()
函数不带参数,因此您可能想要$this->getcolor();
答案 1 :(得分:0)
通过引用传递的解决方案有效,但您也可以尝试:
<?php
function __construct() {
$this->cars = $this->getcars();
foreach ($this->cars as $item) {
$item['color'] = $this->getcolor($item);
}
}
private function getcars() {
$data = array();
$listofcars = array('0','1','2');
foreach ($listofcars as $item) {
$data[] = array('carname' => 'humvee','color' => '');
}
return $data;
}
private function getcolor() {
return 'green';
}
?>