如果它包含在数组中,则删除前几个字符
问题描述:
如果包含数组,则需要从字符串中删除前几个字符 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
答
你可以做这样的...
$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'。选项。您可以重新排列数组以首先使用较长的项目。
答
$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中的其他弦。
答
这里是聪明/可靠的方式,使用正则表达式和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。
你尝试过什么吗? –
“前几个字符”是什么意思?如果'$ array'的值启动变量或特定数量的字符? – chris85