2012-05-11 65 views
0

真的可以做一些幫助。所以,我有2個陣列,像這樣PHP Array插入

Array 
(
    [0] => UK 
    [1] => UK 
    [2] => USA 
    [3] => USA 
    [4] => USA 
    [5] => France 
) 
Array 
(
    [0] => London 
    [1] => Manchester 
    [21] => New York 
    [22] => Florida 
    [23] => Hawaii 
    [24] => Paris 
) 

我需要將其插入到mysql數據庫,像這樣

Country City 
UK  London, Manchester 
USA  New York, Florida, Hawaii 
France Paris 

我沒事用PHP,但我真的堅持這一個。沒有任何代碼顯示,因爲我完全不知道如何完成此操作。有人可以幫我實現這個請。先謝謝您的幫助。

+6

你已經擁有數據庫了嗎?你知道如何從PHP連接到它?您是否確定要將逗號分隔列表插入名爲「城市」的列中? –

+0

看看['foreach()'](http://php.net/manual/en/control-structures.foreach.php)。 – CodeCaster

+0

爲什麼紐約 - 巴黎的指數不是2-5?這將使這容易很多。 – Manuel

回答

0
$countries = array("UK","UK","USA","USA","USA","FRANCE"); 
$cities = array(0=>"London",1=>"Manchester",23=>"New York",24=>"Florida",25=>"Hawaii",26=>"Paris"); 

$combined = array(); 
$cities = array_values($cities); 
foreach ($countries as $index => $country) 
{ 
    $combined[$country][] = $cities[$index];  
} 

foreach ($combined as $country => $cityList) 
{ 
    $sql = sprintf("INSERT INTO `MyTable` (Country,City) VALUES ('%s','%s')",$country,implode(',',$cityList)); 
+0

謝謝......它幾乎是我想要但不是很......我需要它做一個像下面的插入。我該如何去做呢? INSERT INTO MyTable'(Country,City)VALUES('UK','London,Manchester') INSERT INTO MyTable'(Country,City)VALUES('USA','New York,Florida,Hawaii' ) INSERT INTO'MyTable'(Country,City)VALUES('France','Paris') – Dev

+0

是否將查詢發送到數據庫? – gunnx

+0

是的,當我運行你的上面的代碼,它將每個國家插入到新行...有沒有辦法連接結果並插入它? – Dev

2

第一陣列是$countries和第二陣列是$cities

$map = array(); 
while (!empty($countries) && !empty($cities)) { 
    $map[array_shift($countries)][] = array_shift($cities); 
} 

foreach ($map as $country => $cities) { 
    $cities = join(', ', $cities); 
    // TODO: insert row with $country and $cities into database. 
} 

作爲便箋,我懷疑你的數據庫沒有正常化。如果你還沒有這樣做,請閱讀數據庫的規範化。

1

如果你重新索引數組然後你可以遍歷他們兩個並行:

$cities = array_values($cities); 
$countries = array_values($countries); 
for($i = 0; $i < count($cities); ++$i) { 
    $city = $cities[$i]; 
    $country = $countries[$i]; 

    // now do something with $city and $country 
} 

現在讓我們看看什麼是「有所作爲」的部分可能是。如果你想按國家連接城市名稱,你需要先按國家分組。因此,讓我們做到這一點:

$groups = array(); 

for (...) { 
    $city = $cities[$i]; 
    $country = $countries[$i]; 

    if (!isset($groups[$country])) $groups[$country] = array(); 
    $groups[$country][] = $city; 
} 

此時你應該做一個print_r($groups)地看到,我們已經進行分組的城市。每組轉換爲一個連接字符串很簡單:

foreach($groups as &$group) { // ATTENTION: iterating by reference 
    $group = implode(', ', $group); 
} 

並再次做了print_r

但是,這種類型的數據庫結構看起來不正確(取決於應用程序,因此不確定)。也許你應該考慮讓國家/城市列有一張表,所以輸入數組中的每一對元素都對應一行。

+0

非常感謝。感謝您的幫助 – Dev

0
  1. 必須結合國家代碼城市是這樣的:

    Array 
    (
        [0]['code'] => UK 
        [0]['city'] => London 
    ) 
    .... 
    
  2. 如果您有=>對多維數組,你可以創建一個使用適當的SQL的的foreach和情況(如果)語句。
0

所以我不確定你想要做什麼或者爲什麼你有兩個數組可能是1,這當然假設城市總是與其正確的國家聯繫在一起。我要做的就是說,曼徹斯特和倫敦都在英國,所以他們在數據庫中的國家領域將是英國,然後你可以用一個簡單的MySQL查詢來打電話給他們,要求所有的國家等於城市代碼

所以你的數據庫是這樣的

ID  CITY  COUNTRY 
1  London  UK 
2  Manchester UK 
3  New York USA 
4  Florida USA 
5  Hawaii  USA 
6  Paris  France 

然後你就可以用,就像你想要一個MySQL查詢調用它,

SELECT * FROM table WHERE country = 'UK' 

這將然後給你一個結果倫敦和曼徹斯特

這應該讓你朝着正確的方向前進