2017-07-13 262 views
0

我知道使用stripos()我可以在一個字符串搜索,如果此字符串包含了我想要的變量,return 'xx';變量搜索,返回「字符串,字符串2」上搜索

在以下4個字符串看看:

Power Red/Collegiate Burgundy 
Prism Pink,Racer Pink,Mist Blue,Prism Pink 
Red/Vintage White/Gold Metallic 
Sail,Pure Platinum,University Red,Obsidian 

所以這些都是'顏色'的變化,我有大約3000所有變化。

有一些關鍵字總是返回,如Red,Blue,Burgundy等等。

我想做到的是:

if (stripos($color_string, 'Red') !== false) { 
return 'Red';} 

但是有一個問題與此有關。使用上面的代碼在包含Red的所有字符串上返回Red

什麼,我想是這樣的:

字符串Power Red/Collegiate Burgundy/Black Hard/Silver Paradise必須返回Red, Black, Burgundy, Silver

條形碼輸入將由我提供,包含所有不同的顏色變化。我希望我解釋得很好!謝謝

+1

保持一個'$匹配= [];'陣列,而不是'回報 '紅','你可以做'$匹配[] = '紅','。然後,在函數結尾處,一旦完成所有匹配,返回implode(',',$ matches);' –

+0

*「上面的代碼在所有包含紅色的字符串上返回紅色。」* - 我老實說不是很確定問題出在哪裏。 – deceze

+0

Deceze,如果一個字符串包含'Red'而且'Blue',則stripos()不會返回紅色,藍色。它會返回2種顏色中的1種。 – Matthias

回答

0

分割字符串explode(),然後循環,返回所有的顏色匹配。您可以使用正則表達式而不是stripos()

$string = 'Power Red/Collegiate Burgundy/Black Hard/Silver Paradise'; 
$array = explode('/', $string); 
$colors = array_map(function($s) { 
    if (preg_match('/red|blue|black|burgundy|silver|pink/i', $s, $match)) { 
     return $match[0]; 
    } 
}, $array); 
print_r($colors); 

DEMO