2010-09-28 204 views
0

爲什麼你不能使用類的穿越方法與變量的設置參數PHP簡單的HTML DOM解析器

例如,使用此陣:

array(0 => array('element' => 'img[src=images/more.gif]', 'attribute' => 'parent()->href')); 

這個工程:

foreach($this->contents->find($target[$key]['element']) as $keyz => $found) 
{ 
$this->store[$keyz] = $found->parent()->href 
} 

但是這不是:

foreach($this->contents->find($target[$key]['element']) as $keyz => $found) 
    { 
    $this->store[$keyz] = $found->$target[$key]['attribute']; 
    } 

我試圖改變他們,像這樣的數組:

array(0 => array('element' => 'img[src=images/more.gif]', 'traverse' => 'parent()', 'attribute' => 'href') 

然後嘗試:

​​

不起作用。在這兩個故障中,print_r($ this-> store)只是給出Array();

回答

0

謝謝Wrikken,根據您的意見,我想出了這一點,這完美的作品

foreach($this->contents->find($target[$key]['element']) as $keyz => $found) 
      { 
      if (!isset($target[$key]['traverse']) && !isset($target[$key]['attribute'])) 
      { 
      $this->store[] = $found; 
      } 
      else if (isset($target[$key]['traverse']) && !isset($target[$key]['attribute']) 
      { 
      $function = $target[$key]['traverse']; 
      $this->store[] = $found->$function();    
      } 
      else if (isset($target[$key]['traverse']) && isset($target[$key]['attribute'])) 
      { 
       $function = $target[$key]['traverse']; 
      $this->store[] = $found->$function()->$target[$key]['attribute'];  
      } 
      } 
     } 
1

與緩慢的簡單的HTML thingamyig無關:這不是PHP的工作原理,您的字符串parent()->href不會被解釋爲對這些元素的調用。如果你需要這個,你就在正確的軌道上,但你必須區分功能&屬性。 Somethink喜歡兩種:

array(
    'element' => 'img[src=images/more.gif]', 
    'traverse' => array(
    array('parent','function'), 
    array('attribute' ,'property'); 
... 

$result = $found 
foreach($target[$key]['traverse'] as $step){ 
    switch($step[1]){ 
     case 'function': 
      $function = $step[0]; 
      $result = $found->$function(); 
      break; 
     case 'property': 
      $property = $step[0]; 
      $result = $found->$property; 
      break; 
     default: 
      trigger_error("Unknown step method ".$step[1].": not an property or function",E_USER_ERROR); 
    } 
} 
$this->store[$keyz] = $result; 

或者這可能與你原來的字符串的工作:

​​
+0

你有替代方案的建議嗎?我的代碼很簡單,但我不知道如何使用內置的PHP函數。 – JM4 2012-01-16 04:39:18

+0

[戈登創建了一個不錯的列表](http://stackoverflow.com/questions/3577641/how-to-parse-and-process-html-with-php/3577662#3577662) – Wrikken 2012-01-16 06:49:54

相關問題