如何从php变量中打印最后一个p标记元素


how to print last p tag element from php variable

此代码如下,

假设

$GROUPS = $row['groups'];

如果我打印$GROUPS变量,输出将是

<p> Item1 </p>
<p> Item 2 </p>
<p> Item 3 </p>
<p> Item 4 </p>
<p> Item 5 </p>
<p> Item 6 </p>
<p> Item 7 </p>

如何打印$GROUPS变量中的最后一个p标记元素此处输出为项目7

或者,如果我想从$GROUPS变量中(动态)打印第4/5/6个p标记元素。

如何在PHP代码中解决此问题?

如果每行后面都有一个新行,则可以按新行进行分解

$groups = "<p> Item1 </p>
<p> Item 2 </p>
<p> Item 3 </p>
<p> Item 4 </p>
<p> Item 5 </p>
<p> Item 6 </p>
<p> Item 7 </p>";
$groups_arr = explode("'n",$groups);
echo "The last element:".$groups_arr[count($groups_arr)-1];
echo "'n";
echo "The 5th element:".$groups_arr[5-1];

带有

$groups_arr[count($groups_arr)-1];

您可以很容易地引用数组的最后一个元素,而不管数组项数是多少。

对于N元素,由于第一个元素是0,因此仅参考N-1。示例:

echo "The 5th element:".$groups_arr[5-1];

在此处执行操作:http://3v4l.org/4j66Y

如果你想从数组的X到Y元素动态打印,试试这个函数

function PrintFromTo($start,$end,$array)
{
    if(!is_array($array))
        return false;
    $inc=0;
    foreach($array as $an_element)
    {
        $inc++;
        if(($inc>=$start)&&($inc<=$end))
        {
            echo $an_element; // tip: you can append a new line character or a <br>
        }
    }
}

您可以拆分结束p标记上的字符串,然后访问创建的数组中的元素:

$groupsarray = explode('</p>',$GROUPS);
echo $groupsarray[6] . '</p>'; //add back closing p tag
<?php
preg_match_all("#<p>(.*)</p>#", $GROUPS, $match);
print $match[0][6]; // Item 7
?>

您可以使用像DOMDocument这样的HTML解析器以及DOMXPath来有效地将HTML分解为标签(以便于操作)

代码:

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$p = $xpath->query('//p');
//getting last item:
$last =  $p->length - 1;
echo $p->item($last)->nodeValue;
//getting 3rd item:
echo $p->item(2)->nodeValue;

演示

使用json_encode更改$row['groups'];存储数据的方式。

例如,我们有一个字符串类似;<p>Item 1</p> ... <p>Item 7</p>,我们可以将其存储在一个数组中,例如;

$arrGroups = array();
$arrGroups[] = "Item 1";
$arrGroups[] = "Item 2";
$arrGroups[] = "Item 3";
$arrGroups[] = "Item 4";

然后将该数组json_encode,并将其存储在$row['groups']中。

既然$row['groups']保存了一个表示数组["Item 1","Item 2","Item 3","Item 4"]的json字符串,我们可以通过将其解码回数组并选择我们想要的元素来利用它。

$arrGroups = json_decode($row['groups'], true);
//Item 4
echo $arrGroups[count($arrGroups)-1]; //-1 because indexing starts at 0

虽然您可以按照其他答案的建议使用explode,但单独生成<p>并将其存储在阵列中可能会更健壮,例如:

代替

$groups = "<p> Item1 </p>
<p> Item 2 </p>
<p> Item 3 </p>
<p> Item 4 </p>
<p> Item 5 </p>
<p> Item 6 </p>
<p> Item 7 </p>";
echo $groups;

使用

$groups = array(
    " Item 1 ",
    " Item 2 ",
    " Item 3 ",
    " Item 4 ",
    " Item 5 ",
    " Item 6 ",
    " Item 7 ");
echo "<p>".implode("</p><p>", $groups)."</p>";

如果您这样做,您可以使用$groups[6]轻松访问"项目7"。