Search code examples
phpdomdomxpath

Parse DOM document to array php


* What I want is, for the DOM to instead of printing the results line by line in a "foreach" loop, rather store it in an array.... So it should look like a list i.e. "[0] 16GB USB Stick" "[1] Computer monitor" "[2] wireless keyboard" etc etc So far I have this, but it only stores the last value from the for each loop.. Please help! *

$html = new DOMDocument();
@$html->loadHtmlFile('some online shop');
$xpath = new DOMXPath($html);
$nodelist = $xpath->query( "//div[@class='productname']/p" );

foreach ($nodelist as $n)
    {
        $value = $n->nodeValue;
        $list = array($value);
    }

echo $list[0];

Solution

  • That's because you're overriding it in each loop. Create an array, and add to that array:

    $list = array();
    
    foreach ($nodelist as $n)
    {
        $value = $n->nodeValue;
        $list[] = $value;
    }
    
    // Check there's at least one item in the array before accessing it
    if (count($list) > 0)
    {
        echo $list[0];
    }