从字符串中删除前3个字符和最后3个字符 PHP

45

我需要删除字符串的前三个字母和后三个字母。我知道可以使用substr()从特定字符开始,但如果需要同时删除第一个和最后一个字符,我不确定是否可以使用它。有什么建议吗?

我需要删除字符串的前三个字母和后三个字母。我知道可以使用substr()从特定字符开始,但如果需要同时删除第一个和最后一个字符,我不确定是否可以使用它。有什么建议吗?

6个回答

104
将负数值作为第三个参数(即length参数)传递给substr()函数,如下所示:
$result = substr($string, 3, -3);

所以这个:

<?php
$string = "Sean Bright";
$string = substr($string, 3, -3);
echo $string;
?>

输出:

n Bri

30

使用

substr($var,1,-1)

这将始终获取第一个和最后一个,而无需使用strlen。

示例:

<?php
    $input = ",a,b,d,e,f,";
    $output = substr($input, 1, -1);
    echo $output;
?>

输出:

a,b,d,e,f


1
这个答案比被接受的答案更加灵活多用,但是被接受的答案满足了所需的3个字符问题。 - Peter Meadley
这个答案比被接受的那个答案更加多才多艺,具体来说是如何实现的? - Sean Bright

6

如其他答案所述,您可以使用以下函数之一来实现您的目标:

取决于您需要删除的字符数量以及是否需要特定的删除。但最终substr()完美地回答了您的问题。

也许有人想通过字符串解除引用来删除第一个/最后一个字符。忘记它吧,因为null也是一个字符:

<?php
$string = 'Stackoverflow';
var_dump($string);
$string[0] = null;
var_dump($string);
$string[0] = null;
var_dump($string);
echo ord($string[0]) . PHP_EOL;
$string[1] = '';
var_dump($string);
echo ord($string[1]) . PHP_EOL;
?>

返回:

string(13) "Stackoverflow"
string(13) "tackoverflow"
string(13) "tackoverflow"
0
string(13) "ackoverflow"
0

对于字符串,无法使用 unset($string[0]) 进行取消设置:

致命错误: 无法在 /usr/www/***.php 的第 ** 行取消设置字符串偏移量


2
substr($string, 3, strlen($string) - 6)

1
$myString='123456789';
$newString=substr($myString,3,-3);

1

我不懂php,但你不能用substr函数获取字符串长度,从第三个位置开始取length-6个字符吗?


如果我使用substr,它并不会真正地将字符取出。如果我执行substr($var,3),它将从第三个位置开始截取。然后,如果我执行substr($var,-3),字符串中仍将保留前三个字符,并且将提前三个字符结束。我需要完全删除字符。 - Howdy_McGee
看起来Sean Bright已经提供了你的答案。或者你是想从原始字符串中删除字符吗?虽然这不是技术上完全相同的事情,但你可以用substr返回的任何内容替换你的原始变量。 - Antony Scott
没有错,Sean Bright和其他人是正确的。当我最初发表评论时,其他答案还没有出现:S - Howdy_McGee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接