我试图提取一个子字符串。我需要一些帮助,在PHP做它。

以下是我正在使用的一些示例字符串和我需要的结果:

home/cat1/subcat2 => home

test/cat2 => test

startpage => startpage

我想获取第一个/之前的字符串,但如果没有/,则获取整个字符串。

我试过了,

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

我想它说的是-获取/的位置然后获取从0到那个位置的子字符串。

我不知道如何处理没有/的情况,而不使声明太大。

有没有一种方法来处理这种情况,也不使PHP语句过于复杂?


当前回答

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

其他回答

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

你可以创建一个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

使用爆炸()

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

在本例中,我使用limit参数来爆炸,这样php就不会扫描字符串,只扫描所需的部分。

$string="kalion/home/public_html";

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

那么这个呢:

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

简单地添加一个'/'到mystring的末尾,这样你就可以确保至少有一个;)