如果包含在数组中,请删除前几个字符

时间:2017-06-03 11:36:26

标签: php arrays

如果包含数组,我需要从字符串中删除前几个字符 防爆。字符串

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

实施例。阵列

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

在上述情况下,需要从$str1$str2,ans $str3

中删除W.,E。和East

3 个答案:

答案 0 :(得分: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或$ str1的$ str1实例用于其他字符串。

答案 1 :(得分: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

答案 2 :(得分: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);

注意它在$ array中找到字符串的方式,这可能比以后的字符串短。因此,在这种情况下,它返回W. San Marcos Blvd=. San Marcos Blvd.匹配' W'选项,而不是' W。'选项。您可以重新排列数组,使其具有较长的项目。