how can I parse php array like this:

$cars= array(
    "Ford"=>array("C-Max"=>array("length"=>"4333","width"=>"1825","height"=>"1560"),"Escape"=>array("length"=>"4480","width"=>"1845","height"=>"1730")
    ,"Explorer"=>array("length"=>"4912","width"=>"1872","height"=>"1849"),"Fiesta"=>array("length"=>"3950","width"=>"1973","height"=>"1433")
    ,"Focus"=>array("length"=>"4488","width"=>"1840","height"=>"1497"),"Fusion"=>array("length"=>"4013","width"=>"1724","height"=>"1543")
    ,"Galaxy"=>array("length"=>"4820","width"=>"1854","height"=>"1723"),"Kuga"=>array("length"=>"4443","width"=>"1842","height"=>"1677")
    ,"Mondeo"=>array("length"=>"4844","width"=>"1886","height"=>"1500"),"Ranger"=>array("length"=>"5075","width"=>"1805","height"=>"1745")
    ,"S-Max"=>array("length"=>"4768","width"=>"1854","height"=>"1658"),
    "Hummer"=>array("H2"=>array("length"=>"5170","width"=>"2063","height"=>"2012"),"H3"=>array("length"=>"4782","width"=>"1989","height"=>"1872")));

to insert into MySQL table like this:

CREATE TABLE IF NOT EXISTS `cars_dimensions` (
  `id` int(10) NOT NULL auto_increment,
  `brand` varchar(120) character set utf8 NOT NULL,
  `model` varchar(120) character set utf8 NOT NULL,
  `length` varchar(5) character set utf8 NOT NULL,
  `width` varchar(5) character set utf8 NOT NULL,
  `height` varchar(5) character set utf8 NOT NULL,
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

When I use foreach and like $cars["Hummer"]["H2"]["length"]; I somehow can't get another array dimension and cache the actual brand/model at the same time... Tho, my actual array is about 3000 items in the first dimension (brands).

share|improve this question
Every answer so far assumes that Hummer is on the same level as Ford, but in your example it isn't, perhaps that's just a typo though. If it is their code will work, if it isn't none of the 3 answers so far are appropriate. – Cags Jul 29 '10 at 11:59
Yes, sorry I just copy-pasted the code in a wrong way :) – user405610 Jul 29 '10 at 12:13
feedback

3 Answers

up vote 3 down vote accepted

You need two loops, one for the brands and one for their models:

foreach ($cars as $brand => $models) {
    foreach ($models as $model => $specs) {
        $query = "INSERT INTO cars_demensions (brand, model, length, weight, height)
                  VALUES ('$brand', '$model', {$specs['length']}, {$specs['width']}, {$specs['height']});";
    }
}
share|improve this answer
feedback
foreach ( $cars as $brandname => $carinfo  )
{
foreach ( $carinfo  as $modelname => $car )
{
// brand = $brandname
// model = $modelname
// length = $car['length']
// do insert query here
}
}
share|improve this answer
feedback

$rows = '';
foreach($cars AS $brand) {
  foreach($brand AS $model) {
    if(!empty($rows)) $rows .= ', ';
    $rows = "({$car['width']},...)";
  }
}

$sql = "INSERT INTO cars_dimensions (width,...) VALUES $rows";
share|improve this answer
+1 for the extended query. – Brad F Jacobs Jul 29 '10 at 12:06
feedback

Your Answer

 
or
required, but never shown
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.