我正在创建一个脚本,从网页中获取多个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");
}
答案 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解析器,这样它就更安全了。