user2436729
user2436729

Reputation: 37

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];

Upvotes: 1

Views: 7234

Answers (2)

dKen
dKen

Reputation: 3127

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];
}

Upvotes: 6

Vlad Preda
Vlad Preda

Reputation: 9910

You need to look into how arrays work in PHP. What you're doing wrong is you are re-declaring the array on each iteration, instead of adding more information to it.

$list = array();

foreach ($nodelist as $n) {
    $list[] = $n->nodeValue;
}

var_dump($list);

Explanation:

[] basically means - add an item in this array, and auto generate the key.

The foreach I wrote is equivalent to this one:

$i = 0;
foreach ($nodelist as $n) {
    $list[$i] = $n->nodeValue;
    $i ++;
}

Upvotes: 1

Related Questions