2016-04-14 155 views
0

我能夠解析我想要的數據,但我遇到了試圖按照我想要的方式格式化數據的問題。SimpleXML幫助需要

XML數據:

<home> 
<data number="1" name="John" color="Red"/> 
<data number="2" name="Jim" color="Blue"/> 
<data number="3" name"Bob" color="Black"/> 
</home> 

PHP代碼:

foreach ($xml->home->data as $info){ 
$number = $info['number']; 
$name = $info['name']; 
$color = $info['color']; 
mysql insert into database code here 
} 
從這裏

所以我想要做的就是每個條目合併成一個單一變量,所以我可以將其插入我的數據庫。

我想這個插入到數據庫象下面這樣:

1. John(Red) 
2. Jim(Blue) 
3. Bob(Black) 

並將它插入就像是爲一個條目/行,而不是每行插入單獨/新行找到的每個XML數據(這使得希望有義)

回答

0

請求溶液

$str = ""; 
foreach ($xml->home->data as $info){ 
    $str .= $info['number'] . " " . $info['name']. "(".$info['color'].") "; 
} 
//insert into database using whatever method you're using. i.e. PDO. 

愛特納tive soluutions

好吧,爲什麼不把它全部放入數組,將其序列化(供將來使用),然後使base64_encode使其數據庫安全?我知道你沒有特別要求這個,但它絕對是一個更好的解決方案。

$insert = array(); 
foreach ($xml->home->data as $info){ 
    $insert[$info['number']] = $info['name']."(".$info['color'].")"; 
    $insert = base64_encode(serialize($insert)); 
} 
//insert into database using whatever method you're using. i.e. PDO. 

您還可以使用:

$insert[] = array("id" => $info['number'], "name" => $info['name'], "colour" = > $info['color']); 

在這種情況下,您可以通過陣列interate搜索更容易,但通過他們的ID不能訪問特定的人,如果你喜歡的是相反,使用此:

$insert[$info['number']] = array("name" => $info['name'], "colour" = > $info['color']); 

這樣,您就可以把所有的數據備份出來的數據庫和解碼,並unseralise這樣的:

seralize(base64_decode($array)); 

並且經由索引訪問由它們的ID的每個用戶,例如(在第一種情況),$array[1]將包含:John(Red)

對於第二個例子中,使用$array[0]得到John(Red)和在第三示例中,您可以再次使用array[1]

+0

感謝您的答覆和幫助。有沒有辦法在將所有數據項插入到mysql數據庫之前將它們放入一個數組中?例如$ insert會有數據1.John(紅色),2. Jim(藍色),3. Bob(黑色) – Jeebs

+0

這正是我的示例代碼所做的。它將'$ insert'變量中的所有內容都編碼並準備好將其編碼到數據庫中。我在我的答案中提到了這一點,但只需插入'$ insert'的內容並將其存儲在某個地方(如數據庫),然後在通過'seralize(base64_decode($ array))返回;'可以使用'$ array [1]'來訪問字符串「John(Red)」和'$ array [3]'來獲得字符串「Bob(Black)」。我還將用另一個解決方案更新我的答案,該解決方案也將從陣列中的顏色中分割出名稱。 – Daniel

+0

我期待有一個陣列可以將John(紅色)和Bob(黑色)組合在一起。那可能嗎?當我嘗試這個時,它仍然在數據庫中爲每個數組創建單獨的行。我希望數據庫中的所有XML數據都有一行。 – Jeebs

0

的方式我看它,您可以:
- 編寫一個SQL &執行插入
- 創建2個變量(名稱&顏色)的存儲過程。

我更喜歡使用存儲過程,因爲它可以節省數據庫解釋SQL所需的時間,因爲它已經知道它應該做什麼。

我想創建一個表,以下規格:

CREATE TABLE DATA (
id_name VARCHAR, 
color VARCHAR, 
PRIMARY KEY (id_name)) 

然後寫一個存儲過程調用:

CREATE PROCEDURE storeKeys(IN var_name VARCHAR, IN var_color VARCHAR) 
BEGIN INSERT INTO data(id_name, color) VALUES(@var_name, @var_color); 

然後從你的PHP循環中調用這一切,只是設置的變量。

作爲指導:http://php.net/manual/en/mysqli.quickstart.stored-procedures.php

如果你有大量的數據處理,你可以創建一個批處理查詢的的提高性能。

我希望這有助於