2010-09-07 83 views
0

我希望能夠輕鬆快速地從乾草堆陣列中刪除一列針頭。實際上,我有一個以逗號分隔的數字列表(儘管這是一個我知道的字符串),需要從我從sql數據庫中的字段中拉出的第二個以逗號分隔的數字列表中刪除。從數組中刪除數組的值的最佳方法是什麼?

所以我需要 -

$ orig_needle_list = 「3456,5678」; 乾草堆列表位於mysql數據庫中的一個字段中,並且是「3456,4567,5678,6789」 - 所以我基本上想要將此字段更新爲「4567,6789」

Q1。我應該檢索haystack列表,將兩者都轉換爲數組並使用嵌套的foreach循環和array_splice迭代它們的任何匹配值?

Q2我可以使用in_array比嵌套的foreach方法更快嗎?

Q3有沒有辦法切出中間人,並通過在SQL查詢中執行此操作來更新字段?

感謝

+4

爲什麼首先將數據存儲爲這樣?這聽起來像是沿線的某個地方,你或其他人打破了規範化的規則。 – 2010-09-07 15:16:09

回答

5

你並不需要遍歷的東西,有一個函數調用和array_diff:

http://www.php.net/manual/en/function.array-diff.php

因此,創建2個逗號分隔列表數組並使用array_diff,得到的數組就是這兩者的區別。

在數據庫中存儲逗號分隔的列表不是一個好主意,因爲它打破了規範化。

+1

謝謝 - 你的意思是我不應該用逗號分隔值嗎?在其他領域我使用了分號。這個可以嗎? – undefined 2010-09-07 15:47:15

+2

問題不是你使用逗號或分號,問題是你在一個數據庫字段(列)中存儲多個值!最好使用外鍵創建一個額外的表來存儲值。看看http://en.wikipedia.org/wiki/Database_normalization你會在這個新表中有很多新行,但這對你的SQL服務器來說並不是問題,事實上它可以加快速度,因爲它可以爲它編制索引。你也可以直接在DB中執行這個操作(array_diff)! – sled 2010-09-07 15:53:00

0

試試這個:

implode(",",array_diff(explode(",",$haystack),explode(",",$orig_needle_list))); 
相關問題