【发布时间】:2016-05-05 16:39:29
【问题描述】:
我想删除字符串中最后一个连字符及其后面的任何内容。看了之后,我发现了第一个连字符但不是最后一个连字符的东西:
$str = 'sdfsdf-sdfsdf-abcde';
$str = array_shift(explode('-', $str));
当前字符串
$str = 'sdfsdf-sdfsdf-abcde';
想要的结果
$str = 'sdfsdf-sdfsdf';
【问题讨论】:
我想删除字符串中最后一个连字符及其后面的任何内容。看了之后,我发现了第一个连字符但不是最后一个连字符的东西:
$str = 'sdfsdf-sdfsdf-abcde';
$str = array_shift(explode('-', $str));
当前字符串
$str = 'sdfsdf-sdfsdf-abcde';
想要的结果
$str = 'sdfsdf-sdfsdf';
【问题讨论】:
你可以使用这个preg_replace:
$repl = preg_replace('/-[^-]*$/', '', $str);
//=> sdfsdf-sdfsdf
-[^-]*$ 将匹配 - 后跟 0 个或多个非连字符在行尾之前。
【讨论】:
implode/explode,您可以使用:$repl = implode('-', array_slice(explode('-', $str), -2));
你已经接近了。只需使用array_pop() 而不是array_shift()。 array_pop() 删除数组的最后一个元素。当然,您需要稍后使用implode() 将字符串重新组合在一起。
$arr = explode('-', $str);
array_pop($arr);
$str = implode('-', $arr);
重要的是不要在一行中这样做,因为array_pop() 处理对数组的引用并修改它,然后只返回已删除的元素。
其他答案还提到了一些其他可能的解决方案。
【讨论】:
array_pop 返回已删除的元素 ;-) 已修复。
这有点笨重,但对你有用:
$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);
【讨论】: