【问题标题】:substr function returning wrong result in phpsubstr 函数在 php 中返回错误的结果
【发布时间】:2015-07-12 00:22:17
【问题描述】:

我是一名从事 PHP 项目的 VB.NET 开发人员,我正在尝试将我的 VB.NET 函数转换为 php,但没有得到想要的结果。调试后发现substr函数有问题。

在我正在使用的 VB.NET 中

mid(105,2,1) 
This giving me output 0

但是在php中

substr(105,2,1)
Giving me output 5

【问题讨论】:

  • 阅读手册php.net/substr
  • 我不知道它在 VB.NET 中是如何索引的,但对于 php,它是基于 0 的索引,所以更改 2 -> 1。 $str = "105";$str[0] -> 1$str[1] -> 0$str[2] -> 5
  • echo substr(105,1,1);
  • 谢谢 Rizier123,我明白这个问题,问题已经解决了
  • @Mani 不客气!

标签: php vb.net string substring


【解决方案1】:

如果您想在 PHP 中获取 0,您的代码应该是:

echo substr(105,1,1);

输出:

0

如果您想知道原因,请阅读以下内容:

VB.NET

中的mid函数
Public Shared Function Mid( _
   ByVal str As String, _
   ByVal Start As Integer, _
   Optional ByVal Length As Integer _
) As String

str - 必需。返回字符的字符串表达式。

开始 - 必需。整数表达式。要返回的字符的起始位置。如果 Start 大于 str 中的字符数,则 Mid 函数返回零长度字符串 ("")。 开始是基于一个的

长度 可选。整数表达式。要返回的字符数。如果省略或文本中少于 Length 个字符(包括 Start 位置的字符),则返回从开始位置到字符串结尾的所有字符。

示例

' Creates text string. 
Dim TestString As String = "Mid Function Demo" 
' Returns "Mid". 
Dim FirstWord As String = Mid(TestString, 1, 3)
' Returns "Demo". 
Dim LastWord As String = Mid(TestString, 14, 4)
' Returns "Function Demo". 
Dim MidWords As String = Mid(TestString, 5)

PHP中的substr函数

string substr ( string $string , int $start [, int $length ] )

string - 输入字符串。必须为一个字符或更长。

start - 如果 start 为非负数,返回的字符串将从字符串的第 start 位置开始,从零开始计数 .例如,在字符串 'abcdef' 中,位置 0 的字符是 'a',位置 2 的字符是 'c',以此类推。

如果 start 为负数,则返回的字符串将从字符串末尾的第 start 个字符开始。

如果 string 小于或等于起始字符长度,则返回 FALSE。

示例

<?php
echo substr('abcdef', 1);     // bcdef
echo substr('abcdef', 1, 3);  // bcd
echo substr('abcdef', 0, 4);  // abcd
echo substr('abcdef', 0, 8);  // abcdef
echo substr('abcdef', -1, 1); // f
?>

阅读更多:

https://msdn.microsoft.com/en-us/library/05e63829%28v=vs.90%29.aspx

http://php.net/manual/en/function.substr.php

【讨论】:

  • @Rizier123 你读了整整两页(链接)?而且您在此链接中看不到任何其他信息?
  • @Rizier123 我只想写一个对这个问题有用的信息的答案,为此我需要写一些关于函数的解释。真的我看不出我做错了什么。
【解决方案2】:

substr() 接受 2 个参数和一个可选的第三个参数

(字符串,起始位置,*结果长度)

*注意:结果长度

  • 如果 +ve 然后从返回结果的开始偏移,
  • 如果 -ve 则从返回结果的结束偏移

示例:

   substr("abcde",2,1);

   // string: "abcde"
   // start position: 2  => returns "cde"
   // result length: 1  => returns "c"


   substr(105,2,1);

   // string: "105"
   // start position: 2  => returns "5"
   // result length: 1  => returns "5"

您可以test substr online here。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-04
    • 2013-01-11
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多