PHP Case-Insensitive LTRIM?

时间:2011-03-12 11:57:30

标签: php

我正在迭代包含标题和描述的数据数组。每个描述目前都以相应的标题开头,所以我想ltrim()它关闭。遗憾的是,并非所有标题都使用与描述开头时使用的相同的案例格式。我打算用:

ltrim($description,$title)

但案件问题已经停止了。

数据EG:

array(
    array("title" => "Hello World", "description" => "Hello World This is a description"),
    array("title" => "Hellow world", "description" => "Hellow World This is a description"),
    array("title" => "Hello again", "description" => "HELLO AGAIN This is a description"));

ltrim($ description,$ title)会清除第一个,但不管其他人。

我没有创建我正在清理的数据顺便说一句,我刚接管了这份工作。

无论如何,ltrim()是区分大小写的(是吗?)所以我对如何解决这个问题感到很遗憾。还有其他方法吗?

修改

忘记提及,标题并不总是出现在说明中,只有90%的时间

1 个答案:

答案 0 :(得分:8)

ltrim首先不是你想要的功能。 ltrim的第二个参数是一个charlist,所以只要遇到其中一个字符,它就会一直从字符串的左边删除。

如果每个描述中都包含每个标题,您可以使用str_ireplace。并将标题替换为空,并将计数设置为1。

更好的选择是使用正则表达式。

preg_replace('/^'.preg_quote($title, '/').'\s*/i', '', $description);

如果它是描述中的第一个内容,则将替换标题,后跟任何空格(如果它们位于标题之后,则将删除空格/换行符.preg_quote对于保护正则表达式非常重要,因为标题包含任何空格正则表达式字符。