如何在PHP中将HTML字符串拆分为块?

时间:2016-08-22 09:58:43

标签: php substring

我想将字符串有效地拆分成不同的子字符串,如下所示:

SELECT ONTSERIALNUMBER,
       MAX(ONTBEUP) AS MaxBEUP
FROM Arkusz1
GROUP BY ONTSERIALNUMBER

我想将这个字符串分成3个部分,并将每个字符串放在一个变量中。

第一个变量$ first应该包含第一个li( <li><a href="">One</a></li><li><a href>Two</a></li><li><a href>Three</a></li>.....<li><a herf>Last</a></li> ) 第二个变量$ second应该包含其余的期望最后一个(<li>One</li>) 第三个变量$ third应包含最后一个li(<li>Two</li><li>Three</li>.....

任何人都可以提供帮助吗?

3 个答案:

答案 0 :(得分:1)

应该工作:

<?php 

$dom = new DOMDocument;
$dom->loadHTML('<li><a href="#">One</a></li><li><a href="#">Two</a></li><li><a href="#">Three</a></li><li><a href="#">Last</a></li>');
$liTags = $dom->getElementsByTagName('li');

$chunks = array();
foreach ($liTags as $li) {
    $chunks[] = '<li>'.strip_tags($li->nodeValue).'</li>';
}

list($first,$second,$third) = array(
   array_slice($chunks,0,1),
   array_slice($chunks,1,count($chunks)-2),
   array_slice($chunks,-1),    
);


?>

答案 1 :(得分:0)

在这里做的最好的事情,因为你正在处理标记,就是将数据视为它是什么:HTML。解析DOM树,遍历您感兴趣的节点并获取如下数据:

$dom = new DOMDocument;
$dom->loadHTML($data);//parses the markup string
$li = $dom->getElementsByTagName('li');
$liValues = [];
foreach ($li as $elem) {
    $liValues[] = $elem->textContent; // not nodeValue if the nodes can contain other elements, like in your case an "a" tag
}

要获得first,last和middle元素,只需写下:

$length = $li->length; // or count($li); to get the total number of li's
$nodes = [
    $li->item(0), //first
    $li->item(round($length/2)), // middle
    $li->item($length -1), // last
];
//or, given that you don't need the actual nodes
$nodes = [
    $li->item(0)->textContent,
    $li->item(round($length/2))->textContent,
    $li->item($length -1)->textContent,
];

或者只是获取父节点(ulol),然后使用$parent->firstChild$parent->lastChild获取列表中的第一个和最后一个元素,如CD001建议的那样在评论中。

有用的链接:

您可以使用DOMNode返回的DOMNodeListgetElementsByTagName元素的attributes property来进一步了解您存储的数据

答案 2 :(得分:-1)

您可以尝试使用explode

参见代码示例:

<?php
// Example 1
$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2

// Example 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo $user; // foo
echo $pass; // *

?>