2017-06-03 21 views
-1

如果包含数组,则需要从字符串中删除前几个字符 Ex。字符串如果它包含在数组中,则删除前几个字符

$str1 = "W. San Marcos Blvd"; 
$str2 = "E. Point Loma Blvd"; 
$str3 = "East Palomar St" 

Ex。阵列

$array = array('S', 'S.', 'N', 'N.', 'E', 'E.', 'W', 'W.', 'South', 'North', 'East', 'West'); 

在上述情况下需要从$str1$str2删除W.,E.,和东,ANS $str3

+2

你尝试过什么吗? –

+0

“前几个字符”是什么意思?如果'$ array'的值启动变量或特定数量的字符? – chris85

回答

1

你可以做这样的...

$str1 = "W. San Marcos Blvd"; 
$str2 = "E. Point Loma Blvd"; 
$str3 = "East Palomar St"; 

function remove ($string) { 
    $array = array('S', 'S.', 'N', 'N.', 'E', 'E.', 'W', 'W.', 'South', 'North', 'East', 'West'); 
    foreach ($array as $remove) { 
     $len = strlen($remove); 
     if (substr($string, 0, $len) === $remove) { 
      $string= substr($string, $len); 
     } 
    } 
    return $string; 
} 

echo "{$str1}=".remove($str1); 

注意它找到字符串早些时候$阵列的方式,这可能比后来者更短。所以在这种情况下,它返回与'W'选项匹配的W. San Marcos Blvd=. San Marcos Blvd.,而不是'W'。选项。您可以重新排列数组以首先使用较长的项目。

2
$str1 = "W. San Marcos Blvd"; 

$array = array('S', 'S.', 'N', 'N.', 'E', 'E.', 'W', 'W.', 'South', 'North', 'East', 'West');  

    $str=explode(" ", $str1); 
    foreach($str as $key=>$s){ 
    if (in_array($s, $array)) { 
     unset($str[$key]); 
    } 
    } 
    $str1=implode(" ", $str); 

使用$ STR2或$ STR3例如$ str1中的其他弦。

2

这里是聪明/可靠的方式,使用正则表达式和preg_replace()。使用模式中的^锚点和尾部空格可确保仅删除预期的子字符串。 (如果你发现你有其中尾随空间不能被依靠的情况下,则字边界应使用(\b

方法(Demo):

$input=["W. San Marcos Blvd","E. Point Loma Blvd","East Palomar St"]; 
$pattern='/^(?:E(?:\.|ast)?|W(?:\.|est)?|N(?:\.|orth)?|S(?:\.|outh)?) /'; 
var_export(preg_replace($pattern,'',$input)); 

输出:

array (
    0 => 'San Marcos Blvd', 
    1 => 'Point Loma Blvd', 
    2 => 'Palomar St', 
) 

或更多字面意思,如何处理一个字符串:

$input="W. San Marcos Blvd"; 
$pattern='/^(?:E(?:\.|ast)?|W(?:\.|est)?|N(?:\.|orth)?|S(?:\.|outh)?) /'; 
echo preg_replace($pattern,'',$input); 
// output: San Marcos Blvd 

该模式在保持准确性的同时浓缩了您的基数点数组。我已经订购了从最短方向词到最长方向词的替代品 - 这可以优化速度。这里是pattern demo

相关问题