php 获取子串,PHP的子串提取。 在第一个“/”或整个string之前获取string

使用explode()

$arr = explode("/", $string, 2); $first = $arr[0];

在这种情况下,我使用limit参数来explode以便PHP不会扫描string。

最有效的解决scheme是strtok函数:

strtok($mystring, '/')

例如:

$mystring = 'home/cat1/subcat2/'; $first = strtok($mystring, '/'); echo $first; // home

$mystring = 'home'; $first = strtok($mystring, '/'); echo $first; // home

$first = explode("/", $string)[0];

那这个呢 :

substr($mystring.'/', 0, strpos($mystring, '/'))

只需在mystring的末尾添加一个“/”,以确保至less有一个;)

这可能是我脑海中最短的一个例子:

list($first) = explode("/", $mystring);

1)如果发现分隔符, list()将自动分配string直到"/"

2)如果分隔符"/"没有find,那么整个string将被分配

…如果你真的痴迷于性能,你可以添加额外的参数爆炸explode("/", $mystring, 2) ,这限制了返回元素的最大值。

PHP 5.3中的函数strstr()应该做这个工作。然而第三个参数应该被设置为true。

但是如果你不使用5.3,那么下面的函数应该可以正确的工作:

function strbstr( $str, $char, $start=0 ){ if ( isset($str[ $start ]) && $str[$start]!=$char ){ return $str[$start].strbstr( $str, $char, $start+1 ); } }

我还没有testing过,但这应该工作得很好..而且速度也非常快

接受答案的单行版本:

$out=explode("/", $mystring, 2)[0];

应该在PHP 5.4 +工作

迟到比从未好。 PHP有一个预定义的function。 这是好方法。

strstr

function not_strtok($string, $delimiter) { $buffer = strstr($string, $delimiter, true); if (false === $buffer) { return $string; } return $buffer; } var_dump( not_strtok('st/art/page', '/') );

你可以尝试使用这样的正则expression式:

$s = preg_replace('|/.*$|', '', $s);

有时候,正则expression式会比较慢,所以如果性能是一个问题,那么一定要正确地对这个基准进行基准testing,如果它更适合你,可以使用其他的替代方法。

使用current explode将缓解过程。

$str = current(explode("/", $str, 2));

你可以创build一个辅助函数来处理这个问题:

/** * Return string before needle if it exists. * * @param string $str * @param mixed $needle * @return string */ function str_before($str, $needle) { $pos = strpos($str, $needle); return ($pos !== false) ? substr($str, 0, $pos) : $str; }

这是一个用例:

$sing = 'My name is Luka. I live on the second floor.'; echo str_before($sing, '.'); // My name is Luka

$string="kalion/home/public_html"; $newstring=( stristr($string,"/")==FALSE ) ? $string : substr($string,0,stripos($string,"/"));

我认为这应该工作?

substr($mystring, 0, (($pos = (strpos($mystring, '/') !== false)) ? $pos : strlen($mystring)));

为什么不使用:

function getwhatiwant($s) { $delimiter='/'; $x=strstr($s,$delimiter,true); return ($x?$x:$s); }

要么:

function getwhatiwant($s) { $delimiter='/'; $t=explode($delimiter, $s); return ($t[1]?$t[0]:$s); }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值