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”。

乍一看这句话可能令人困惑,但它使这个特定实例中的执行顺序变得清晰。