2016-06-10 200 views
-1

我試圖更改包含數組(城市名稱)值的字符串(城市)。在數組中搜索字符串

代碼:

for ($i=0; $i<$1000; $i++) { 

$cities = "I live in Prag"; 
$array = array("Wien","Prag","Berlin"); 
foreach ($array AS $val) { 

     if (preg_match("/".$val."/", $cities)) { 
     $cities = str_replace($val, ", " . $val. ", ", $cities);  
     } 
    } 
} 

有另一種解決方案?

感謝

+0

是字符串總是這樣?這個城市名的意思是大寫字母? – Andreas

+0

我不確定你的問題是什麼?代碼是否工作?通常總是有不止一種方法來做某些事情。 – Epodax

+0

奇怪的替換...應該用'Prag'代替什麼值? – RomanPerekhrest

回答

0

下面是使用preg_replaceimplode功能的簡單的解決方案:

$cities = "I live in Prag but love Wien"; 
$array = array("Wien","Prag","Berlin"); 
$cities = preg_replace("/\b". implode("|", $array) ."\b/", ',$0,', $cities); 

print_r($cities); // "I live in ,Prag, but love ,Wien," 
0

如果你需要找到符合條件的值的鍵,那麼你需要循環數組過來,讓這樣使用。

$example = array('An example','Another example','One Example','Last example'); 
$searchword = 'last'; 
$matches = array(); 
foreach($example as $k=>$v) { 
    if(preg_match("/\b$searchword\b/i", $v)) { 
     $matches[$k] = $v; 
    } 
} 
+0

我嘗試Gorakh的例子! – Erik

0

我想......

$cities = "I live in Prag"; 
$array = array("Wien","Prag","Berlin"); 
foreach ($array AS $val) { 

    $cities = preg_replace("/(.*)(" . $val . ")(.*)/", "$1, $2, $3", $cities); 
} 

Echo $cities; 

可以做到這一點。

編輯工作示例:https://3v4l.org/0eDDW

+0

我認爲Gorakh的例子可能是我需要的解決方案。但相反,陣列中的城市是應該在變量城市中找到的字符串。 – Erik

+0

@Erik So ??這與我的答案有什麼關係?我的回答不正確嗎? – Andreas

+0

它可以在多個匹配工作https://3v4l.org/HlS9a – Andreas