2011-11-08 45 views
0

我對編程非常陌生,並且一直在試圖讓這個網頁抓取工具長達兩天的時間,我的頭靠在牆上。我簡化了完整的腳本(甚至刪除了所有實際的網頁抓取),同時保持原有的功能障礙。簡單的PHP網頁抓取腳本出錯了

我猜的代碼是很容易理解的訓練有素的眼睛,但爲了方便地使用,我會說,腳本應該:

  1. 填充與子陣列
  2. 設置一些數組值到每個子陣列,但留下空的最後一個子陣列值
  3. 一個)獲取與另一個函數的最後一個子陣列的值,3 b),然後將它們插入到原始陣列

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

哪裏的$這個定義 - > getcolor()** WITH **參數? –

+0

恐怕我不明白這個問題。我將提供一個鏈接到整個代碼:[link](http://www.matthewwatts.net/tutorials/php-tutorial-2-advanced-data-scraping-using-curl-and-xpath/)隨着GigaWatt或Grok建議的更改,它終於有效 - 非常感謝你! – Martin

+0

在GigaWatt答案的編輯中有解釋。 –

回答

1

您的foreach循環沒有通過引用傳遞(您所做的任何更改都不會「粘住」)。將其更改爲:

foreach ($this->cars as &$item)

編輯:它也像$this->getcolor($item);可能是一個問題。您定義的getcolor()功能不帶參數,所以你可能要做出$this->getcolor();

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'; 
    } 
?>