Jeebs Jeebs - 2 years ago 73
PHP Question

SimpleXML Help Needed

I am able to parse the data I want but I'm having issues trying to format the data the way I want to.

XML Data:

<data number="1" name="John" color="Red"/>
<data number="2" name="Jim" color="Blue"/>
<data number="3" name"Bob" color="Black"/>

PHP Code:

foreach ($xml->home->data as $info){
$number = $info['number'];
$name = $info['name'];
$color = $info['color'];
mysql insert into database code here

So from here what I want to do is combine each entry into a single variable so I can insert it into my database.

I'd like to insert this into the database like below:

1. John(Red)
2. Jim(Blue)
3. Bob(Black)

And insert it just like that as one entry/row instead of each line being inserted separately/new row for each XML Data found.(Hopefully that makes sense)

Answer Source

Requested solution

$str = "";
foreach ($xml->home->data as $info){
    $str .= $info['number'] . " " . $info['name']. "(".$info['color'].") ";
//insert into database using whatever method you're using. i.e. PDO.

Alternative soltutions

Alright, why don't you put it all into an array, serialize it (for future use) and then base64_encode to make it database-safe? I know you didn't specifically ask for this, but it'd definitely be a better solution.

$insert = array();
foreach ($xml->home->data as $info){
    $insert[$info['number']] = $info['name']."(".$info['color'].")";
    $insert = base64_encode(serialize($insert));
//insert into database using whatever method you're using. i.e. PDO.

You could also use:

$insert[] = array("id" => $info['number'], "name" => $info['name'], "colour" = > $info['color']);

In this case, you can interate through the array to search easier but cannot access the specific person via their ID, if you'd like that instead, use this:

$insert[$info['number']] = array("name" => $info['name'], "colour" = > $info['color']);

This way, you can pull all the data back out of the database and decode and unseralise like this:


And access each user by their ID via the indexes, for example (in the first case), $array[1] would contain: John(Red)

For the second example, use $array[0] to get John(Red) and in the third example, you can use array[1] again.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download