如何解析php数组:
$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")));
像这样插入MySQL表:
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 ;
当我使用foreach
并且像$cars["Hummer"]["H2"]["length"];
时,我无法获得另一个数组维度并同时缓存实际的品牌/型号......那么,我的实际数组大约有3000个项目在第一个维度(品牌)。
答案 0 :(得分:4)
您需要两个循环,一个用于品牌,一个用于其模型:
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']});";
}
}
答案 1 :(得分:1)
foreach ( $cars as $brandname => $carinfo )
{
foreach ( $carinfo as $modelname => $car )
{
// brand = $brandname
// model = $modelname
// length = $car['length']
// do insert query here
}
}
答案 2 :(得分:1)
$rows = '';
foreach($cars AS $brand) {
foreach($brand AS $model) {
if(!empty($rows)) $rows .= ', ';
$rows = "({$car['width']},...)";
}
}
$sql = "INSERT INTO cars_dimensions (width,...) VALUES $rows";
答案 3 :(得分:0)
完整的可执行代码和 TESTED 。这是更有效,更快捷的方法。使用这种方式,您可以使用单个插入查询插入多行。
<?php
$col = [];
foreach ($cars as $brand => $models) {
foreach ($models as $model => $specs) {
if (isset($specs['length']) || isset($specs['width']) || isset($specs['height'])) {
$length = $specs['length'];
$width = $specs['width'];
$height = $specs['height'];
} else {
foreach ($specs as $k => $v) {
$length = $v['length'];
$width = $v['width'];
$height = $v['height'];
}
}
$col[] = "('" . $brand . "', '" . $model . "', '" . $length . "', '" . $width . "', '" . $height . "')";
}
}
$query = "INSERT INTO `cars_dimensions`(`brand`, `model`, `length`, `width`, `height`) VALUES" . implode(',', $col) . ";";
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->exec($query);
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
希望它能帮到你。谢谢。