我想在字符串中删除最后一个连字符和后面的任何内容。看了之后我找到了第一个连字符但不是最后一个连字符的东西:
$str = 'sdfsdf-sdfsdf-abcde';
$str = array_shift(explode('-', $str));
当前字符串
$str = 'sdfsdf-sdfsdf-abcde';
期望的结果
$str = 'sdfsdf-sdfsdf';
答案 0 :(得分:1)
您可以使用此preg_replace
:
$repl = preg_replace('/-[^-]*$/', '', $str);
//=> sdfsdf-sdfsdf
-[^-]*$
将匹配-
,后跟0行或更多非连字符字符。
答案 1 :(得分:0)
您可以使用strrpos
获取最后一个索引,然后使用substr
获得所需的结果。
$str = 'sdfsdf-sdfsdf-abcde';
$pos = strrpos($str , "-");
if ($pos !== false) {
echo substr($str, 0, $pos);
}
答案 2 :(得分:0)
你关闭了。只需稍后使用array_pop()
代替array_shift().
array_pop()removes last element of array. You need, of course, use
implode()`将strign再次放在一起。
$arr = explode('-', $str);
array_pop($arr);
$str = implode('-', $arr);
重要的是不要在一行中执行此操作,因为array_pop()
处理对数组的引用并对其进行修改,然后仅返回已删除的元素。
其他答案还提到了一些其他可能的解决方案。
答案 3 :(得分:0)
这有点笨重,但它适合你:
$str = 'sdfsdf-sdfsdf-abcde';
$pieces = explode("-",$str);
$count = count($pieces);
for ($x = 0; $x <= $count - 2; $x++) {
$desired_result .= $pieces[$x].'-';
}
$desired_result = substr($desired_result, 0, -1);
echo $desired_result;
如果你有很多这些,你可以使用这个功能:
function removeLast($str){
$pieces = explode("-",$str);
$count = count($pieces);
for ($x = 0; $x <= $count - 2; $x++) {
$desired_result .= $pieces[$x].'-';
}
$desired_result = substr($desired_result, 0, -1);
return $desired_result;
}
你叫它:
$str = 'sdfsdf-sdfsdf-abcde';
$my_result = removeLast($str);