2014-05-15 29 views
0

我有一個數據庫的MySQL含有產品名稱與他的各自的顏色當一個字符串開始與另一個不同時?

例如列

desk GM dark blue 
desk GM dark green 
desk GM yellow 
desk GM pink 
desk GM yellow 
desk HY sad blue 
desk HY yellow 
desk bull red 
desk bull happy green 

產品將desk GMdesk HYdesk bull和顏色會

- dark blue 
- dark green 
- pink 
- yellow 
- sad blue 
- red 
- happy green 

注意的是,顏色不應該被複制一次以上,無論是產品。


我沒有開始的代碼,因爲我沒有線索從哪裏開始(除了獲取列表從我的SQL在一個文件中,並通過在閱讀它)做的。

我在想方法來區分它們,例如,在2位置(使用explode函數)將啓動顏色名稱之後。但是,有名稱如Home Theather EagleCenter Table America以及其他類似Hack 5000Hack Angel

所以,我的問題是:有沒有辦法,除了手動創建一個products數組從每個字符串結果中刪除它們?

我從上面的文本所表達的例子。考慮到$products是由我手動提供的。

foreach($products as $product) { 
    if (strpos($products, $row_result_from_sql) !== false) { 
     str_replace($products, "", $row_result_from_sql); 
    } 
} 
+1

因此,您將產品和顏色存儲爲一個字符串,並且您想要從字符串中刪除顏色部分?是對的嗎? –

+0

@MarkM是的,這是相當準確的我想要的。很高興你明白=) –

+1

但我90%肯定這是不可能做到的......我在這裏張貼更多來清理我的良心。 –

回答

1

取決於你正在處理什麼用,你也許可以做到這一點是這樣的:

$colors = array(
    'dark blue', 
    'dark green', 
    'pink', 
    'yellow', 
    'sad blue', 
    'red', 
    'happy green' 
); 

$products = array(
    'desk GM dark blue', 
    'desk GM dark green', 
    'desk GM yellow', 
    'desk GM pink', 
    'desk GM yellow', 
    'desk HY sad blue', 
    'desk HY yellow', 
    'desk bull red', 
    'desk bull happy green' 
); 

foreach ($products as $i=>$product) 
    foreach ($colors as $color) 
     if (strpos($product, $color) !== false) 
      $products[$i] = str_replace($color, '', $products[$i]); 

print_r($products); 

結果:

Array 
(
    [0] => desk GM 
    [1] => desk GM 
    [2] => desk GM 
    [3] => desk GM 
    [4] => desk GM 
    [5] => desk HY 
    [6] => desk HY 
    [7] => desk bull 
    [8] => desk bull 
) 
+1

問題是他必須從數據庫中提取一列,然後將它們分成各自的數組插入其他表中。 –

+0

這種方式,我將不得不有一個產品或顏色以前的列表運行該foreach –

+0

雅我正在閱讀最新的評論,我看到這是行不通的。在不知道可能的顏色或產品的情況下,我不知道如何做到這一點。 –

0

如果表中表示只2 words。您可以使用:

SELECT SUBSTRING_INDEX('fieldname',' ', 2) from tableName; 
+0

正如我在這個問題中指出的那樣。 ''我在想方法來區分它們,例如,在2位置(使用爆炸函數)後會啓動顏色名稱,但有些名稱像Home Theatre Eagle和Center Table America以及其他像Hack 5000和哈克天使。「' –

+0

在這種情況下,只有顏色映射將幫助你像\t 回答建議 – volkinc

0

,如果你有一個已知的顏色[]數組在代碼中的所有顏色,

你可以讀取數據庫,併爲每個記錄 如果顏色中的任何條目[]在每個記錄的產品字段文本中找到,

用「」 替換顏色文本,然後將(修改的)產品文本保存到產品[]數組中。

您沒有提及重複的產品名稱(無顏色信息)是否必須是唯一的。 如果是這樣,您可以檢查(修改後的)產品文本是否已經在數組中,如果沒有,則將其添加爲數組中的新條目。

+0

正如我在問題中所說。 **不,我沒有**任何包含顏色和產品的陣列 –

相關問題