Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Regex将数据提取到数组中_Php_Regex - Fatal编程技术网

Php Regex将数据提取到数组中

Php Regex将数据提取到数组中,php,regex,Php,Regex,希望有人能帮助我,因为我不知道正则表达式。 我需要将经典html页面中包含的数据提取到PHP数组中。 HTML代码如下所示: <html> ...some html code... <div data-companycounter="9879" data-code="A" data-seatcounter="9783" class=""> ...some html code... <di

希望有人能帮助我,因为我不知道正则表达式。
我需要将经典html页面中包含的数据提取到PHP数组中。
HTML代码如下所示:

<html>
...some html code...
<div data-companycounter="9879" data-code="A" data-seatcounter="9783" class="">
...some html code...
<div data-companycounter="9879" data-code="B" data-seatcounter="9784" class="">
...some html code...
<div data-companycounter="11397" data-code="A" data-seatcounter="11509" class="">
...some html code...
</html>
希望它足够清晰。感谢那些能帮助我的人

函数自定义解析html($html)
function custom_parse_html($html)
{
    $company_counter = [];

    preg_match_all('/<div data-companycounter="(.*)" data-code="(.*)" data-seatcounter="(.*)" (.*)>/im', $html, $matches);

    foreach ($matches[0] as $key => $arr) {
        //  $matches[1][$key] => data-companycounter
        //  $matches[2][$key] => data-code
        //  $matches[3][$key] => data-seatcounter

        if (!empty($company_counter[$matches[1][$key]])) {
            $company_counter[$matches[2][$key]] = $matches[3][$key];
        } else {
            $company_counter[$matches[1][$key]] = [$matches[2][$key] => $matches[3][$key]];
        }
    }

    return $company_counter;
}
{ $company_counter=[]; preg_match_all('//im',$html,$matches); foreach($将[0]匹配为$key=>$arr){ //$matches[1][$key]=>数据公司计数器 //$matches[2][$key]=>数据代码 //$matches[3][$key]=>数据座位计数器 如果(!空($company_counter[$matches[1][$key]])){ $company_计数器[$matches[2][$key]]=$matches[3][$key]; }否则{ $company_计数器[$matches[1][$key]]=[$matches[2][$key]=>$matches[3][$key]]; } } 返回$company_计数器; }
正如评论中所说的,使用regex代替regex可以很容易地从HTML中提取数据。 因此,只需从
DOMDocument
类初始化一个对象
$doc
。 使用方法
getElementsByTagName
获取所有div,然后迭代它们并获取所需的公司信息属性,按特定顺序将它们设置为
$companycounter
数组

$html=
'
';
$doc=newDOMDocument();
$doc->loadHTML($html);
$divs=$doc->getElementsByTagName('div');
$companycounter=[];
foreach($div作为$div){
$counter=$div->attributes->item(0)->value;//数据公司计数器
$code=$div->attributes->item(1)->value;//数据代码
$seatcounter=$div->attributes->item(2)->value;//数据seatcounter
$companycounter[$code]=$seatcounter;
}

echo“您可能希望使用实际的HTML解析器来完成此工作。是的,如果您使用
DOMDocument
类,提取数据将很容易。请检查我的答案!
function custom_parse_html($html)
{
    $company_counter = [];

    preg_match_all('/<div data-companycounter="(.*)" data-code="(.*)" data-seatcounter="(.*)" (.*)>/im', $html, $matches);

    foreach ($matches[0] as $key => $arr) {
        //  $matches[1][$key] => data-companycounter
        //  $matches[2][$key] => data-code
        //  $matches[3][$key] => data-seatcounter

        if (!empty($company_counter[$matches[1][$key]])) {
            $company_counter[$matches[2][$key]] = $matches[3][$key];
        } else {
            $company_counter[$matches[1][$key]] = [$matches[2][$key] => $matches[3][$key]];
        }
    }

    return $company_counter;
}
/*
Array
(
    [9879] => Array
        (
            [A] => 9783
            [B] => 9784
        )

    [11397] => Array
        (
            [A] => 11509
        )

)