多个GetBetween调用

时间:2011-12-22 15:54:26

标签: php

我正在创建一个脚本,从网页中获取多个CSS文件,并使用foreach()include()将它们放在一起。

我已经找到了正确的功能:

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"); 
}

1 个答案:

答案 0 :(得分:0)

实际上,通过从函数返回一个数组,你可以迭代它。例如:

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

但是到目前为止,您的GetBetween函数不会返回数组。你也试图在这里解析HTML,你不需要编写一个函数来解析它,而是你可以在PHP中使用现有的HTML Parser:

/**
 * 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 /示例输出:

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

从技术上讲,您可以使用字符串搜索执行与GetBetween函数类似的操作,使其返回数组。但是因为它是HTML,我建议你使用HTML解析器,这样它就更安全了。