PHP 清理数组 preg_grep

PHP clear up Array preg_grep

我目前在 php 中遇到数组问题, 我从一个 html 站点请求了所有 <li> 标签:

$dochtml = new DOMDocument();
$dochtml -> loadHTMLFile("my.html");

/*get all li’s*/
$lis = $dochtml -> getElementsByTagName('li');

我的HtmlBody:

<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> 标签中的所有 ID 和值:

    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

请帮帮我。

一次完成所有事情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);

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