PHP:获取所有<options>标签的值到一个数组

PHP: Get Values of all <options> Tag to an array

首先:抱歉,我只是在学习编码,所以这可能是一个简单的问题:)。

我要存档的是获取所有

的值
<option value="123"></option>
<option value="412"></option> 

在一个html文档中放入一个数组。因此,对于上面的示例,只有“123”、“412”等。如果数组只是数字,则将对其进行检查。

这是我得到的:

$html = file_get_contents(url);
preg_match_all('/value="(\w+)"/', $html, $result);
var_dump($result);
$digits = array_filter($result, 'ctype_digit');

我从中得到的是什么,因为 $result 给我的结果如下:

value="123"

我知道我搞砸了那些正则表达式,但我无法正确理解。

然后我不确定使用 XPath 来 select 是否更好,但我也没有得到 :(.

非常感谢任何帮助! :)

多亏了CD001和如月的追捕,我成功了。使用 DOMDocument 非常简单...有时人们会觉得太复杂...

$html = file_get_contents('url');
$dom = new DOMDocument;
$dom->loadHTML($html);
$options = $dom->getElementsByTagName('option');
$digits = array();
foreach ($options as $option) {
    $valueID = $option->getAttribute('value');
    array_push($digits, $valueID);
}
var_dump($digits);

我的建议是不要使用正则表达式,而是使用 domparser。

对于您提供的数据,$result 是一个包含 2 个数组的 array。您的值在第二个数组 $result[1]

您可以将代码更新为:

preg_match_all('/value="(\w+)/', $html, $result);
$digits = array_filter($result[1], 'ctype_digit');
var_dump($digits);

那会给你:

array(2) {
  [0]=>
  string(3) "123"
  [1]=>
  string(3) "412"
}

Php demo output

另一种正则表达式:

value="\K\d+(?=") 匹配一位或多位数字 d+

Php demo output