PHP清理数组preg_grep

时间:2017-05-07 13:38:47

标签: php html arrays preg-match preg-grep

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

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

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

我的Html Body:

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

请帮帮我。

2 个答案:

答案 0 :(得分:1)

使用XPath:

int LoadData(char** buf1, int* buf1Len, char** buf2, int* buf2Len) {
    *buf1Len = DetermineLength1();
    *buf1 = (char*)malloc(*buf1Len);
    // Fill buf1
    *buf2Len = DetermineLength2();
    *buf2 = (char*)malloc(*buf2Len);
    // Fill buf2
    int result = 0; // Or some other INT depending of result
    return result;
}

答案 1 :(得分:0)

在一个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);