我将网页的内容分配给变量$html
以下是$html
的内容示例:
<div class="content">something here</div>
<span>something random thrown in <strong>here</strong></span>
<div class="content">more stuff</div>
如何使用PHP创建一个数组,从中找到<div class="content"></div>
区域的内容,如上所示(对于上面的示例),所以:
echo $array[0] . "\n" . $array[1]; //etc
输出
something here
more stuff
答案 0 :(得分:4)
假设这只是OP中的一个简化案例,并且实际情况更复杂,您将需要使用XPath。
如果它真的很复杂,那么您可能想要使用DOMDocument(使用DOMXPath),但这是一个使用SimpleXML的简单示例
$xml = new SimpleXMLElement($html);
$result = $xml->xpath('//div[@class="content"]');
while(list( , $node) = each($result)) {
echo $node,"\n";
}
由于您明确询问了为此创建数组,您可以使用:
$res_Arr = array();
while(list( , $node) = each($result)) {
$res_Arr[] = $node;
}
和$res_Arr
将是一个包含您正在寻找的内容的数组。
有关XP SimpleXML Xpath信息,请参阅http://php.net/manual/en/simplexmlelement.xpath.php,有关XPath规范,请参阅http://www.w3.org/TR/xpath
答案 1 :(得分:2)
PHP有几种处理HTML的方法,包括DomDocument
和SimpleXML
。见Parse HTML With PHP And DOM。这是一个例子:
$dom = new DomDocument;
$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;
$divs = $dom->getElementsByTagName('div');
foreach ($divs as $div) {
$class = $div->getAttribute('class');
if ($class == 'content') {
echo $div->nodeValue . "\n";
}
}
从技术上讲,class属性可以是多个类,因此您可能希望使用:
$classes = explode(' ', $class);
if (in_array('content', $classes)) {
...
}
SimpleXML / XPath方法更简洁但如果您不想使用XPath路径(并且学习另一种技术,至少足以完成这些类型的任务),那么以上是一种程序化的替代方案。
答案 2 :(得分:0)
您可能需要使用preg_match_all
()
$matches = array();
preg_match_all('`\<div(.*?)class\=\"content\"(.*?)\>(.*?)\<\/div\>`iUsm',$html,$matches,PREG_SET_ORDER);
foreach($matches as $m){
// $m[3] represents the content in <div class="content">
}
答案 3 :(得分:0)
没有太多可以做不到使用字符串操作函数或正则表达式。您可以使用DOM库将HTML作为XML加载并使用它遍历您的div,但如果您不小心或结构很复杂,那么这会变得很麻烦。
答案 4 :(得分:0)
看起来Kalem13打败了我,但我同意。您可以使用DOMDocument类。我没有亲自使用它,但我认为这对你有用。首先,实例化DOMDocument对象,然后使用loadHTML()函数加载$ html变量。然后,您可以使用getElementsByTagName()功能。