2011-12-22 11 views
0

私は、ウェブページから複数のCSSファイルを取得し、foreach()include()を使用してそれらをまとめたスクリプトを作成しています。複数のGetBetweenコール

私はすでに、右の機能が見つかりました:

function GetBetween($content, $start, $end) { 
    $r = explode($start, $content); 

    if(isset($r[1])) { 
     $r = explode($end, $r[1]); 
     return $r[0]; 
    } 

    return ''; 
} 

は、アレイ内のすべてを取得するには、この機能の代替はありますか? これを使用して配列内の複数の文字列を取得するにはどうすればよいですか?たとえば :あなたはそれを反復処理することができ、関数から配列を返すことにより、実際に

foreach($css = GetBetween($page, '<link rel="stylesheet" href="','"') { 
    include("$css"); 
} 

答えて

0

。例:

ただし、GetBetween関数はこれまでの配列を返しません。また、あなたがここにHTMLを解析しようとしている、あなたはそれを解析する機能を記述する必要はありませんが、その代わりに、あなたは、PHPで既存のHTMLパーサを利用することができます:

/** 
* All stylesheet files within a HTML source 
*/ 
class StyleSheets extends DOMDocument implements IteratorAggregate 
{ 
    public function __construct($source) 
    { 
     parent::__construct(); 
     $this->loadHTML($source); 
    } 
    public function getIterator() 
    { 
     static $array; 
     if (NULL === $array) 
     { 
      $xp = new DOMXPath($this); 
      $expression = '//head/link[@rel="stylesheet"]/@href'; 
      $array = array(); 
      foreach($xp->query($expression) as $node) 
       $array[] = $node->nodeValue; 
     } 
     return new ArrayIterator($array); 
    } 
} 

あなたは、簡単にそれを使用することができます:

foreach(new StyleSheets($page) as $index => $file) 
{ 
    printf("#%d: %s\n", $index, $file); 
} 

Demo出力/例:あなたはそれをリターンを作るあなたのGetBetween機能を行うよう

#0: file1.css 
#1: file2.css 
#2: file3.css 

技術的には、文字列の検索と同様の何かができます配列も同様です。しかし、HTMLのように、代わりにHTMLパーサーを使用することをお勧めします。

+0

ありがとうSO MUCH – user1079160

+0

お手伝いしている場合は、その答えを受け入れてください。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-workを参照してください。 – hakre

関連する問題