PHP清除数组preg_grep
我目前在php中遇到数组问题, 我从一个html站点请求了所有PHP清除数组preg_grep,php,html,arrays,preg-match,preg-grep,Php,Html,Arrays,Preg Match,Preg Grep,我目前在php中遇到数组问题, 我从一个html站点请求了所有标记,其中包含: $dochtml = new DOMDocument(); $dochtml -> loadHTMLFile("my.html"); /*get all li’s*/ $lis = $dochtml -> getElementsByTagName('li'); 我的Html正文: <li>gfvgvefg</li> <li>ferfergegeg</li>
标记,其中包含:
$dochtml = new DOMDocument();
$dochtml -> loadHTMLFile("my.html");
/*get all li’s*/
$lis = $dochtml -> getElementsByTagName('li');
我的Html正文:
<li>gfvgvefg</li>
<li>ferfergegeg</li>
<li id="vdfvdfvf"></li>
<li id="id_1"> My Value 1</li>
<li id="id_2"> My Value 2</li>
<li id="id_3"> My Value 3</li>
<li id="id_4"> My Value 4</li>
<li></li>
<li id="efgvefgvfg">gfegvefgbv</li>
您可以看到一些id为0,也有值
我想要的是这个输出(打印):
因此,在一个数组中,只有id带有id_*和正确的值
我试试这个:
foreach($lis as $key) {
// gets, and outputs the ID and content of each DIV
$id = $key -> getAttribute('id');
$value = $key -> nodeValue;
//echo $id. ' - '.$value.'<br>';
$array = array($value => $id);
$matches = preg_grep('/^id_(\w+)/i', $array);
print_r($matches);
}
没有id,没有价值,什么都没有。
我知道我可以通过preg_grep使用array_键,但是我只得到id和空数组
以下是在线编译中的代码,以便更好地理解
请帮帮我。一次完成每件事
$arrLis = array();
foreach($lis as $key) {
$id = $key -> getAttribute('id');
// check if `id` starts with `id_` string
if (strpos($id, 'id_') === 0) {
$value = $key -> nodeValue;
echo $id. ' - '.$value.'<br>';
$arrLis[$id] = $value;
}
}
print_r($arrLis);
$arrLis=array();
foreach($lis作为$key){
$id=$key->getAttribute('id');
//检查'id'是否以'id.'字符串开头
if(strpos($id,'id')==0){
$value=$key->nodeValue;
回显$id.-'.$value.
';
$arrLis[$id]=$value;
}
}
印刷费($arrLis);
使用XPath进行相同操作:
$dom =new DOMDocument;
$dom->loadHTMLFile("my.html");
$xp = new DOMXPath($dom);
$nodeList = $xp->query('//li[starts-with(@id, "id_")]');
foreach ($nodeList as $node) {
$result[$node->getAttribute('id')] = $node->nodeValue;
}
print_r($result);
好了,现在我的输出是
Array([id\u 1]=>my value1[id\u 2]=>my value2[id\u 3]=>my value3[id\u 4]=>my value4[efgvegvfg]=>gfegvefgbv)
但是我现在如何实现preg\u grep函数来只获取Array([id\u 1]=>my value1[id\u 2]=>my value2[id\u 3]=>my value3[id\u 4]=>my value4]=>my value4)
。。。。通配符:嘿,很酷,谢谢!!还有一个问题,strpos作为preg_grep更好吗?在你的例子中是这样的。因为使用strpos
只需执行一个操作-检查字符串中的子字符串,使用preg_grep
执行多个操作-创建数组,然后运行preg_grep
,该操作在引擎盖下将在数组上迭代。那么,为什么要做几个动作而不是一个呢?
foreach($lis as $key) {
// gets, and outputs the ID and content of each DIV
$id = $key -> getAttribute('id');
$value = $key -> nodeValue;
//echo $id. ' - '.$value.'<br>';
$array = array($value => $id);
$matches = preg_grep('/^id_(\w+)/i', $array);
print_r($matches);
}
Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( ) Array ( )
$arrLis = array();
foreach($lis as $key) {
$id = $key -> getAttribute('id');
// check if `id` starts with `id_` string
if (strpos($id, 'id_') === 0) {
$value = $key -> nodeValue;
echo $id. ' - '.$value.'<br>';
$arrLis[$id] = $value;
}
}
print_r($arrLis);
$dom =new DOMDocument;
$dom->loadHTMLFile("my.html");
$xp = new DOMXPath($dom);
$nodeList = $xp->query('//li[starts-with(@id, "id_")]');
foreach ($nodeList as $node) {
$result[$node->getAttribute('id')] = $node->nodeValue;
}
print_r($result);