PHP清理阵列preg_grep
问题描述:
我目前的一个问题,在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和空数组...
这里是在线编译中的代码,以便更好地理解。
请帮助我。
答
在单个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);
好凉爽现在我的输出是'阵列([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_ * –
看到我更新的答案, DES。 –
嘿非常酷,谢谢!还有一个问题,就是preg_grep更好吗? –