php substr 如何处理两个偏移值?
How does php substr deal with two offset values?
考虑以下几点:
echo substr("abcdefgh", 1, -1);
// outputs bcdefg
echo substr("abcdefgh", 2, -2);
// outputs cdef
似乎 substr
将第一个数字参数作为距字符串开头的偏移量,将第二个参数作为距字符串末尾的另一个偏移量。
我看了官方文档https://www.php.net/manual/en/function.substr.php他们没有提到可以有两个偏移量。他们更希望第二个数字参数是 length
.
那么,substr
是否将第二个数字参数作为负数时从末尾的第二个偏移量?
编辑: 为了进一步补充问题,正如评论中所讨论的,文档提到:
If $length is given and is negative, then that many characters will be omitted from the end of string (after the start position has been calculated when a offset is negative).
这部分令人困惑,因为它说当偏移量为负时计算起始位置后。如果我们将第二个数字参数作为长度,则没有偏移量是负数。
您一定没有仔细阅读说明!
If length is given and is negative, then that many characters will be
omitted from the end of string...
https://www.php.net/manual/en/function.substr.php
根据编辑后的问题更新:
after the start position has been calculated when a offset is negative
这只是说明它将首先使用 offset
参数计算起始位置,然后使用 length
参数计算起始位置,而不是相反,因为那样会给您不同的结果。
考虑一下:
php > echo substr("phpisfun", -5, -2);
isf
如果您首先使用 length
参数修改此字符串,然后使用 offset
,您将得到字符串“hpisf”。
乍一看这句话可能令人困惑,但它使这个特定实例中的执行顺序变得清晰。
考虑以下几点:
echo substr("abcdefgh", 1, -1);
// outputs bcdefg
echo substr("abcdefgh", 2, -2);
// outputs cdef
似乎 substr
将第一个数字参数作为距字符串开头的偏移量,将第二个参数作为距字符串末尾的另一个偏移量。
我看了官方文档https://www.php.net/manual/en/function.substr.php他们没有提到可以有两个偏移量。他们更希望第二个数字参数是 length
.
那么,substr
是否将第二个数字参数作为负数时从末尾的第二个偏移量?
编辑: 为了进一步补充问题,正如评论中所讨论的,文档提到:
If $length is given and is negative, then that many characters will be omitted from the end of string (after the start position has been calculated when a offset is negative).
这部分令人困惑,因为它说当偏移量为负时计算起始位置后。如果我们将第二个数字参数作为长度,则没有偏移量是负数。
您一定没有仔细阅读说明!
If length is given and is negative, then that many characters will be omitted from the end of string...
https://www.php.net/manual/en/function.substr.php
根据编辑后的问题更新:
after the start position has been calculated when a offset is negative
这只是说明它将首先使用 offset
参数计算起始位置,然后使用 length
参数计算起始位置,而不是相反,因为那样会给您不同的结果。
考虑一下:
php > echo substr("phpisfun", -5, -2);
isf
如果您首先使用 length
参数修改此字符串,然后使用 offset
,您将得到字符串“hpisf”。
乍一看这句话可能令人困惑,但它使这个特定实例中的执行顺序变得清晰。