2017-05-07 23 views
1

我目前的一个问题,在PHP的数组, 我请求从一个HTML网站的所有<li>标签具有:PHP清理阵列preg_grep

$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> 

然后我回显我的所有编号和值<li>标签:

foreach($lis as $key) { 

     $id = $key -> getAttribute('id'); 
     $value = $key -> nodeValue; 

     echo $id. ' - '.$value.'<br>'; 

    } 

输出:

0 - gfvgvefg 
0 - ferfergegeg 
vdfvdfvf - 0 
id_1 - My Value 1 
id_2 - My Value 2 
id_3 - My Value 3 
id_4 - My Value 4 
0 - 0 
efgvefgvfg - gfegvefgbv 

你看到一些id的值是0,值也是。

我要的是这个输出(print_r的):

Array ([id_1] => My Value 1 
    [id_2] => My Value 2 
    [id_3] => My Value 3 
    [id_4] => My Value 4) 

所以只有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); 
} 

,但我得到这个输出(print_r的):

Array () Array () Array () Array () Array () Array () Array () Array () Array () 

没有id没有价值,没有什么。 我知道我可以通过preg_grep使用array_keys,但后来我只得到了id和空数组...

这里是在线编译中的代码,以便更好地理解。

Code Online Compiled

请帮助我。

回答

1

在单个foreach尽一切:

$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); 
+0

好凉爽现在我的输出是'阵列([ID_1] =>我的值1 [ID_2] = >我的价值2 [id_3] =>我的价值3 [id_4] =>我的价值4 [efgvefgvfg] => gfegvefgbv)'但我如何实现preg_grep函数现在只获得'阵列([id_1] =>我的价值1 [id_2] =>我的价值2 [id_3] =>我的价值3 [id_4] =>我的价值4)'....通配符:id_ * –

+0

看到我更新的答案, DES。 –

+0

嘿非常酷,谢谢!还有一个问题,就是preg_grep更好吗? –

1

同样使用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);