views:

104

answers:

3

Hello, 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).

+1  A: 

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']});";
    }
}
Gumbo
+1  A: 
foreach ( $cars as $brandname => $carinfo  )
{
foreach ( $carinfo  as $modelname => $car )
{
// brand = $brandname
// model = $modelname
// length = $car['length']
// do insert query here
}
}
killer_PL
+1  A: 

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

$sql = "INSERT INTO cars_dimensions (width,...) VALUES $rows";
Mchl
+1 for the extended query.
Brad F Jacobs