0

我是 PHP 新手,并已尽力使用 PHP 参考指南,但我显然在这里遗漏了一些东西。这是我的工作流程:

  1. 我有一个数组,里面存储了大约 120 个链接
  2. 我想抓取这些链接并从中获取产品信息
  3. 我想将该产品信息存储在数据库中

对于#3,我认为最好的方法是将信息存储在 PHP 对象中,然后将其导出到数据库。如果我错了,请纠正我,并且有更好的方法来做到这一点!

这是我的代码,当我尝试分配属性时,它当前正在返回“PHP 通知:尝试在 /home/scriptrunner/script.php 中获取非对象的属性”错误(奇怪的是,只有当我获得属性时$$productName->moreImages3 = $the_html->find(".extra_images ", 2)->src;但这可能是一个红鲱鱼。

class Product{ //Creates an object class for products
    public $name = '';
    public $infoLink = '';
    public $description = '';
    public $mainImage = '';
    public $moreImages1 = '';
    public $moreImages2 = '';
    public $moreImages3 = '';
    public $moreImages4 = '';
    public $price = '';
    public $designer= '';
}


function getInfo($infoLink){    // Trawls the product pages for info  

    $the_content = scraperwiki::scrape($infoLink);
    $the_html = str_get_html($the_content);

    $productName = $the_html->find("#item_info h1", 0)->innertext;
    $$productName = new Product;
        $$productName->name = $productName;
        $$productName->infoLink = $infoLink;
        $$productName->designer = $the_html->find("#item_info h2", 0)->innertext;
        $$productName->description = $the_html->find("#item_info .product-body", 0)->innertext; //Might cause issues because there are multiple <p> tags in this div
        $$productName->mainImage = $the_html->find("#item_image .imagecache-product_item_default", 0)->src;
        $$productName->moreImages1 = $the_html->find(".extra_images ", 0)->src;
        $$productName->moreImages2 = $the_html->find(".extra_images ", 1)->src;
        $$productName->moreImages3 = $the_html->find(".extra_images ", 2)->src;
        $$productName->moreImages4 = $the_html->find(".extra_images ", 3)->src;
        $$productName->price = $the_html->find("#price", 0)->innertext;

        print_r($$productName ->name); //A test to see if it's working
}

for ($i = 0; $i<count($allLinks); ++$i){
   getInfo($allLinks[$i]);
};

for循环贯穿 120 个链接(包含在 中)$allLinks。有什么想法我在这里出错了吗?

编辑:作为参考,每个页面上有四个带有 class 的图像.extra_images,所以我想将每个图像存储为一个单独的属性。

4

1 回答 1

2

变量变量名称从来都不是一个好主意,尤其是批量。只需使用一个数组:

$products[$productName] = new Product;
$products[$productName]->name = $productName;  
$products[$productName]->infoLink = $infoLink;
$products[$productName]->designer = $the_html->find("#item_info h2", 0)->innertext;
$products[$productName]->description = $the_html->find("#item_info .product-body", 0)->innertext; //Might cause issues because there are multiple <p> tags in this div
$products[$productName]->mainImage = $the_html->find("#item_image .imagecache-product_item_default", 0)->src;
$products[$productName]->moreImages1 = $the_html->find(".extra_images ", 0)->src;
$products[$productName]->moreImages2 = $the_html->find(".extra_images ", 1)->src;
$products[$productName]->moreImages3 = $the_html->find(".extra_images ", 2)->src;
$products[$productName]->moreImages4 = $the_html->find(".extra_images ", 3)->src;
$products[$productName]->price = $the_html->find("#price", 0)->innertext;

这样您就可以通过产品名称轻松地单独访问产品,例如

echo $products[$productName]->name;

如果您需要,还可以遍历您的所有产品:

foreach($products as $product)
{
    var_dump($product);
}

没有可怕的混乱。

于 2013-02-23T02:51:17.827 回答