我试图提取一个子字符串。我需要一些帮助,在PHP做它。
以下是我正在使用的一些示例字符串和我需要的结果:
home/cat1/subcat2 => home
test/cat2 => test
startpage => startpage
我想获取第一个/之前的字符串,但如果没有/,则获取整个字符串。
我试过了,
substr($mystring, 0, strpos($mystring, '/'))
我想它说的是-获取/的位置然后获取从0到那个位置的子字符串。
我不知道如何处理没有/的情况,而不使声明太大。
有没有一种方法来处理这种情况,也不使PHP语句过于复杂?
迟到总比不到好。PHP有一个预定义的函数。这是一个好方法。
strstr
如果你想获得匹配前的部分,只需将before_needle(第3个参数)设置为true
http://php.net/manual/en/function.strstr.php
function not_strtok($string, $delimiter)
{
$buffer = strstr($string, $delimiter, true);
if (false === $buffer) {
return $string;
}
return $buffer;
}
var_dump(
not_strtok('st/art/page', '/')
);
你可以创建一个helper函数来处理这个问题:
/**
* 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