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 和空数组…
这里是网上编译的代码,方便理解。
请帮帮我。
一次完成所有事情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);
我目前在 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 和空数组…
这里是网上编译的代码,方便理解。
请帮帮我。
一次完成所有事情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);