2012-05-10 48 views
0

这似乎将有一个非常简单的解决方案...但我有一个很难计算出来。我需要一个数组来进入数据库。例如:插入多维数组信息到数据库

$usa = array(
'idaho' => array(
      county1 => array(
        'pocatello', 'arimo', 'downey' 
        ), 
      county2 => array(
         'bear', 'cuprum', 'mesa' 
        ) 
'iowa' => array(
      county1 => array(
        'des moines', 'adel', 'desoto' 
        ), 
      county2 => array(
         'douglas', 'grant', 'jasper' 
        ) 

); 

我试图插入数据库的这个方法:

foreach($usa as $state => $county){ 
    foreach($county as $name => $city){ 
    $s=$state; 
    $county_name = strtolower($name); 
    $city = strtolower($city); 
    $us = "INSERT INTO us 
      SET state='{$s}',county='{$county_name}',city='{$city}' 
      "; 
    $us_result = mysql_query($us,$connection); 
     } 
    } 

我相信问题是在foreach(通过状态变量进入第二foreach循环)。我已经尝试了许多不同的方法。在此先感谢您的帮助!

***注:一切都很正常,当我删除$ S = $状态变量和状态=“{$ S}”插入的部分。我仍然无法得到它插入状态

回答

1

有两个主要的问题。

首先,你的阵列没有正确界定,它是更好地使用单个或双引号为县名,你指的是作为字符串反正:

$usa = array(
    'idaho' => array(
     'county1'=>array(
       'pocatello', 'arimo', 'downey' 
       ), 
     'county2'=>array(
        'bear', 'cuprum', 'mesa' 
       )), 
    'iowa' => array(
     'county1'=>array(
       'des moines', 'adel', 'desoto' 
       ), 
     'county2'=>array(
        'douglas', 'grant', 'jasper' 
       )) 

); 

其次,应该有一个更多的foreach循环来解释城市名称:

foreach($usa as $state => $county){ 
    foreach($county as $name => $city){ 
    foreach ($city as $cityname) { 
     $s = $state; 
     $county_name = strtolower($name); 
     $city = strtolower($cityname); 
     $us = "INSERT INTO us SET state='{$s}',county='{$county_name}',city='{$city}'"; 
     echo $us.'<br>'; 
    } 
    } 
} 

希望这有助于!

+0

+1,但你错过了上适当使用转义'mysql_real_escape_string' –

+0

强调我宁愿提问学习相关的东西,几件事情在时间,因为他/她似乎是新手PHP程序员。 – clayjar

+0

我是沉浸的坚定信徒;如果你再也没有看到这个人,他会继续写他的查询;-) –

0

您的INSERT查询不正确。 试试这个:

$us = "INSERT INTO us (state, county, city) VALUES ('" . mysql_real_escape_string ($s) . "', '" . mysql_real_escape_string ($county_name) . "', '" . mysql_real_escape_string ($city) . "')"; 
+0

良好的小费,但这还不是最大的问题:) –

0

好像你已经错过了一个更多的foreach:

foreach($county as $name => $cities) { 
foreach ($cities as $city) { 
.... 
1

首先。正如@itsmeee所说的,你错过了再次通过该县城市阵列的另一个foreach。除此之外,您的输入数组缺少2个关闭对象来包装每个状态的数据数组。

如果解决这个问题,我只想做:

$us  = "INSERT INTO us (state, county, city) VALUES "; 
$values = array(); 

foreach($usa as $state => $county){ 
    foreach($county as $name => $cities){ 
     foreach($cities as $city){ 
      $county_name = strtolower($name); 
      $city  = strtolower($city); 
      $values[] = "('{$state}','{$county_name}','{$city}')"; 
     } 
    } 
} 

$us  .= join(',',$values); 
$us_result = mysql_query($us,$connection); 

这将建立插入串并做所有的刀片在一杆。你也可以做单独的插入,但对于一个数据集来说,这么小的插入一个大插入效率更高。

祝你好运!

+0

关于一次性插入所有城市的好处。 +1 – itsmeee