2017-06-03 37 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

相關問題