2012-05-10 53 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