Jump to content

[SOLVED] Array to database question?


psunshine

Recommended Posts

Hi,

 

I have looked using search and several other places trying to find a good detailed descriåtion on how to put differebt arrays in to my db table and have still not come up with anything concrete :( I have an array that looks like this:

 

Array
(
    [1] => Array
        (
            [1] => Description1
            [4] => Name1
            [6] => Date1
            [8] => URL1
            [2] => none
            [3] => none
            [5] => none
            [7] => none
            [9] => none
            [10] => none
        )

    [2] => Array
        (
            [1] => Description2
            [4] => Name2
            [6] =>Date2
            [8] => URL2
            [9] => none
            [10] => Picture2
            [2] => none
            [3] => none
            [5] => none
            [7] => none
        )

    [3] => Array
        (
            [1] => Description3
            [2] => Homepage3
            [3] => City3
            [4] => Name3
            [6] => Date3
            [7] => Year3
            [8] => none
            [5] => none
            [9] => none
            [10] => Picture3
        )

    [4] => Array
        (
            [1] => Description4
            [2] => Homepage4
            [3] => City4
            [4] => Name4
            [5] => Product4
            [6] => none
            [7] => Year4
            [8] => none
            [9] => none
            [10] => none
        )
)

 

^Courtesy of some much appreciated help from effigy on this threadhttp://www.phpfreaks.com/forums/index.php/topic,204808.0.html

 

I am searching high and low to find an answer or at least a good tutorial on how to insert this type of array in to my table where each value of each array represents a different column. Any ideas or pointers how to do this?

 

Thanks

Pat

Link to comment
Share on other sites

Yes, sorry, I think I was VERY unclear with what I said. Each array should be a new row and each value in array inserted to corresponding field. Any suggestions or pointers on how to accomplish the insert? Im a newbie and am trying to get my head around this but there arent many tutorials about on array to db table :(

 

Thx

Pat

Link to comment
Share on other sites

try this out...read through it first, cus you have to fill in some stuff

 

<?php
  // Map of index numbers to table columns
  $map = array(
    1 => 'description',
    4 => 'name',
    6 => 'date',
    // etc
  );
  // $data is your array
  // I also assume a mysql connection already exists
  foreach($data as $row){
    $values = array();
    foreach($map as $n => $key){
      if(isset($row[$n]))
        $values[$key] = mysql_real_escape_string($row[$n]);
    }
    $sql = "INSERT INTO tablename (`".implode("`,`",array_keys($values))."`) VALUES ('".implode("','",$values)."')";
    mysql_query($sql) or die("Error: ".mysql_error());
  }
?>

Link to comment
Share on other sites

;D ;D ;D

 

Thanks Rhodesa, worked like a charm and I kinda understand how it works as well which is a bonus of course  :P

 

So here is the full code for my specific data to array to mysql database. Hopefully it can help some other lost souls out there!

 

<?php
$lines = array(
	'<item><1>abc1</1><2>abc2</2><3>abc3</3><4>abc4</4></item>',
	'<item><1>abc1</1><3>abc3</3><5>abc5</5><6>abc6</6></item>',
	'<item><1>abc1</1><6>abc6</6><2>abc2</2><3>abc3</3></item>'
);
$data = array();
$num = 1;
foreach ($lines as $line) {
	preg_match_all('%<(\d+)>(.+?)</\1>%', $line, $matches);
	foreach ($matches[1] as $key => $value) {
		$data[$num][$value] = $matches[2][$key];
	}
	++$num;
}
foreach ($data as &$line) {
	for ($key = 1; $key <= 6; $key++) {
		if (!array_key_exists($key, $line)) {
			$line[$key] = 'none';
		}
	}
}

  $map = array(
        1 => 'field1name',
2 => 'field2',
3 => 'field3',
4 => 'field4',
5 => 'field5',
6 => 'field6',

  );


  foreach($data as $row){

$dbname = "databasename";
$dbuser = "meyou";
$dbpass = "abracadabra";
$dbserver = "localhost";
$tablename = "mytable";

mysql_connect($dbserver, $dbuser, $dbpass) or die('Error connecting to mysql');
mysql_select_db($dbname);

    $values = array();
    foreach($map as $n => $key){
      if(isset($row[$n]))
        $values[$key] = mysql_real_escape_string($row[$n]);
    }
    $sql = "INSERT INTO `brands` (`".implode("`,`",array_keys($values))."`) VALUES ('".implode("','",$values)."')";
    mysql_query($sql) or die("Error: ".mysql_error());
  }
?>

 

I used regex preg_replace and preg_match/all on raw data to reach the initial $lines.

 

Once again big thx.

 

Pat

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.