[英]PHP substr after a certain char, a substr + strpos elegant solution?
假設我想在一些針char'x 'x'
之后返回所有字符:
$source_str = "Tuex helo babe"
。
通常我會這樣做:
if( ($x_pos = strpos($source_str, 'x')) !== FALSE )
$source_str = substr($source_str, $x_pos + 1);
你知道更好/更聰明(更優雅的方式)嗎?
不使用regexp不會使它更優雅,也可能更慢。
不幸的是我們做不到:
$source_str = substr(source_str, strpos(source_str, 'x') + 1);
因為當找不到'x'
時, strpos
返回FALSE
(而不是JS中的-1
)。 FALSE
將評估為零,並且第一個字符將始終被切斷。
謝謝,
你的第一種方法很好:檢查strpos
是否包含x
,如果是,則使用substr
獲取任何內容。
但你也可以使用strstr
:
strstr($str, 'x')
但是當它返回以 x
開頭的子字符串時 ,使用substr
來獲取x
之后的部分:
if (($tmp = strstr($str, 'x')) !== false) {
$str = substr($tmp, 1);
}
但這要復雜得多。 所以請改用你的strpos
方法。
正則表達式將使它更優雅:
// helo babe
echo preg_replace('~.*?x~', '', $str);
// Tuex helo babe
echo preg_replace('~.*?y~', '', $str);
但你總是可以試試這個:
// helo babe
echo str_replace(substr($str, 0, strpos($str, 'x')) . 'x', '', $str);
// Tuex helo babe
echo str_replace(substr($str, 0, strpos($str, 'y')) . 'y', '', $str);
我只需要這個,並努力將它保持在一條線上以獲得樂趣:
ltrim(strstr($source_str, $needle = "x") ?: $source_str, $needle);
ternary operator
在5.3中進行了調整,以實現這一點。
從PHP 5.3開始,可以省略三元運算符的中間部分。 表達式expr1?:expr3如果expr1的計算結果為TRUE則返回expr1,否則返回expr3。
NB。 ltrim
將在字符串的開頭修剪多個匹配的字符。
if(strpos($source_str, 'x') !== FALSE )
$source_str = strstr($source_str, 'x');
不太優雅,但開頭沒有x
:
if(strpos($source_str, 'x') !== FALSE )
$source_str = substr(strstr($source_str, 'x'),1);
在$item
的末尾附加一個' - ',因此它總是在' - '之前返回字符串,即使$item
不包含' - ',因為strpos默認返回第一次出現 ' - '的位置。
substr($item,0,strpos($item.'-','-'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.