Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当第二个参数包含运算符符号时,为什么ltrim会删除一个字符?_Php_String_Trim - Fatal编程技术网

Php 当第二个参数包含运算符符号时,为什么ltrim会删除一个字符?

Php 当第二个参数包含运算符符号时,为什么ltrim会删除一个字符?,php,string,trim,Php,String,Trim,如果我这样做: ltrim('53-34567', '53-'); ltrim('53+34567', '53+'); ltrim('53*34567', '53*'); 我得到的结果是4567,而不是34567。这种行为的解释是什么?ltrim()的第二个参数如下所示 字符掩码 还可以通过character_mask参数指定要去除的字符。只需列出所有要删除的字符 它用于指定要修剪的字符,包括3。如果知道要提取什么,可以使用其他字符串函数 至于为什么不删除另一个5,请参阅此注释: 在'53-3

如果我这样做:

ltrim('53-34567', '53-');
ltrim('53+34567', '53+');
ltrim('53*34567', '53*');

我得到的结果是
4567
,而不是
34567
。这种行为的解释是什么?

ltrim()的第二个参数如下所示

字符掩码
还可以通过character_mask参数指定要去除的字符。只需列出所有要删除的字符

它用于指定要修剪的字符,包括
3
。如果知道要提取什么,可以使用其他字符串函数

至于为什么不删除另一个
5
,请参阅此注释:

'53-34567'
的开头有一个
5
,因此它被删除

'3-34567'
的开头有一个
3
,因此将其删除

'-34567'
的开头有一个
-
,因此将其删除

'34567'
的开头有一个
3
,因此它被删除

'4567'
开头的
'53-'
中没有任何内容,因此它停止了


这与删除不需要的尾随字符的
trim()
的行为相同。例如,
trim(“大量空格”)
将通过删除尾随前导空格返回
“很多空格”
,但将保留内部空格。

这是因为
ltrim
从第二个参数修剪字符

工作原理:

  • 开始从左侧读取字符串(第一个参数)
  • 检查左前一个字符是否在“要修剪的字符”列表中
  • 如果2为是-修剪它并转至步骤1
  • 如果2为否-退出

  • 函数的作用是:从字符串的左侧删除空格或其他预定义字符。可能重复的,或者第二个参数是一组字符,而不是一个字符序列。我想我不明白:)在这种情况下,
    5
    为什么不进行修剪?最终结果包含
    5
    。另外,如果我使用
    53
    作为第二个参数(没有任何运算符符号),我会得到
    +34567
    结果。@sica07:try
    ltrim('52*34567','52*')您将得到更精确的答案,trim()排除第二个参数中列出的字符(与它们出现的频率无关),而不是参数字符串。在OT的例子中,这三行可以简化为
    ltrim($str,“+3-5*”)
    (或字符的任何其他排列),并且工作方式相同。非常清楚!非常感谢。这是一个非常清楚和很好的解释正在发生的事情。远比抛出
    字符掩码
    定义有用。如果我有什么建议,请在您的答案中的某个地方添加“继续删除
    53-34567
    左侧的
    5
    3
    -
    ”。
    ltrim('53-34567', '53-');