Masum billah
Masum billah

Reputation: 982

How to parse all attributes of tag from string into array using php?

I have a html string like...

<match id="18" srs="ICC Womens World Cup Qualifier, 2010" mchDesc="BANW vs PMGW" mnum="4th Match">

Using php how i can split/decode/parse this string as a accessible object(key value pair) such as....

array(
    "id"=>"18", 
    "srs"=>"ICC Womens World Cup Qualifier, 2010", 
    "mchDesc"=>"BANW vs PMGW", 
    "mnum"=>"4th Match"
);

Output:

Array
(
    [id] => 18
    [srs] => ICC Womens World Cup Qualifier, 2010
    [mchDesc] => BANW vs PMGW
    [mnum] => 4th Match
)

Upvotes: 0

Views: 591

Answers (2)

Eduardo Lynch Araya
Eduardo Lynch Araya

Reputation: 824

This Should Work.

(\w+)\=\"([a-zA-Z0-9 ,.\/&%?=]+)\"

Code PHP:

<?php
$re = '/(\w+)\=\"([a-zA-Z0-9 ,.\/&%?=]+)\"/m';
$str = '<match id="18" srs="ICC Womens World Cup Qualifier, 2010" mchDesc="BANW vs PMGW" mnum="4th Match">
';

preg_match_all($re, $str, $matches);

$c = array_combine($matches[1], $matches[2]);

print_r($c);

Output:

Array
(
    [id] => 18
    [srs] => ICC Womens World Cup Qualifier, 2017
    [mchDesc] => BANW vs PMGW
    [mnum] => 4th Match, Group B
    [type] => ODI
    [vcity] => Colombo
    [vcountry] => Sri Lanka
    [grnd] => Colombo Cricket Club Ground
    [inngCnt] => 0
    [datapath] => google.com/j2me/1.0/match/2017/
)

Ideone: http://ideone.com/OQ7Ko1

Regex101: https://regex101.com/r/lyMmKF/7

Upvotes: 2

Casimir et Hippolyte
Casimir et Hippolyte

Reputation: 89584

Using DOMDocument and DOMAttr:

$str = '<match id="18" srs="ICC Womens World Cup Qualifier, 2010" mchDesc="BANW vs PMGW" mnum="4th Match">';
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($str);

$result = [];

foreach($dom->getElementsByTagName('match')->item(0)->attributes as $attr) {
    $result[$attr->name] = $attr->value;
}

print_r($result);

The main advantage is that it doesn't care if attributes values are enclosed between single or double quotes (or no quotes at all), if there are spaces before or after the equal sign.

Upvotes: 4

Related Questions