2016-06-10 131 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