2011-11-08 11 views
0

私はプログラミングにとても慣れていて、2日間このウェブスクレーパを作成しようと壁に頭をぶつけていました。元の機能不全を維持しながら、完全なスクリプトを単純化しました(実際のウェブスクレイピングもすべて削除しました)。シンプルなPHPのWebスクレイピングスクリプトが間違っていた

私はコードは訓練された目のために理解するのは簡単だと思いますが、convenianceのために、私はスクリプトがすることになっていると言うことでしょう:

  1. いくつかを設定しますサブアレイ
  2. 持つ配列を移入各サブアレイに値が、空の最後のサブ配列の値を残し
  3. a)は別の機能を持つ最後のサブ配列値を取得し、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);のように見える問題になる可能性があります。あなたは参考資料で通過させるためのもの$this->getcolor();

0

溶液を作製する場合がありますので、あなたが定義したgetcolor()関数は、パラメータを取ることはありませんが、あなたもこれを試すことができます$ thisの定義だ

<?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'; 
    } 
?> 
関連する問題