我有一个名为listelements()
的函数,它输出<li>text1</li><li>text2</li>
。
我有超过500个元素。现在我想将它转换为数组。
任何人都可以帮助我吗?感谢。
注意:我正在使用php
我想要实现的是字母导航。截至目前,我的功能按列表顺序显示链接。而不是我想在数组中持有它。然后我想用字符过滤它们。
$valid_characters = range( 'a' , 'z' );
$valid_numbers = array(1,2,3,4,5,6,7,8,9,0);
当用户点击“A”时,我想只显示以A开头的链接。 希望这个解释可以帮助你们更好地理解我的问题
答案 0 :(得分:2)
<?php
$output = listelements();
$array = explode("<li>", $output);
//First element will be empty, so remove it
unset($array[0]);
// Now remove "</li>" at end of input
array_walk($array, create_function('&$val', '$val = str_replace("</li>", "", $val)'));
// $array should now contain your elements
答案 1 :(得分:1)
explode不会很好地为html标签做好准备(将它们视为多个分隔符)。
如果不考虑CPU时间,请尝试使用preg_match,例如:
<?PHP
$input='<li>text1</li><li>text2</li><LI><p>text3</p></lI><Li>text fou4r</li>';
preg_match_all('(<(li|Li|LI|lI)>(.*)</(li|Li|LI|lI)>)siU', $input, $output);
print_r($output[2]);
?>
输出:
Array
(
[0] => text1
[1] => text2
[2] => <p>text3</p>
[3] => text fou4r
)
答案 2 :(得分:0)
$strarr=explode("<li>",$string); //Breaks every <li>
$i=(-1); //Makes -1 as array starts at 0
$arr=array(); //this will be your array
foreach($strarr as $expl){ //Go through all li's
$ai=explode("</li>",$expl);//Get between the li. If there is something between </li> and <li>, it won't return it as you don't need it
if($i!=(-1))$arr[$i]=$ai[0]; //First isn't valid
$i=$i+1; //add i plus one to make it a real array
}
答案 3 :(得分:0)
您可以使用simple_html_dom https://simplehtmldom.sourceforge.io/manual.htm
sudo service apache2 restart
答案 4 :(得分:-1)
使用“preg_match”。
以下是更多详细信息:http://www.php.net/manual/en/function.preg-match-all.php