0

我有字符串,字符串可能包含 0 个或多个冒号“:”

我需要拆分这个字符串并获得 2 个变量:

1) $before= 第一个冒号之前的字符串
2) $after= 第一个冒号之后的字符串

如果字符串不包含冒号, $before并且$after必须是空字符串

也就是说,从aa:ss:dd:44

$before = aa$after = ss:dd:44

我有两个想法,如何做到这一点:

1)

    $str = "aa:ss:dd:44";

    $before = mb_strstr($str, ":", TRUE, "utf-8");

    $after = mb_substr( mb_strstr($str, ":", FALSE, "utf-8"), 1, mb_strlen($str, "utf-8") , "utf-8" );

2)

    $str = "aa:ss:dd:44";

    preg_match_all("#(^[^:]*):(.*)#u", $str, $matches);

    if (isset($matches[1][0])) {
        $before = $matches[1][0];
    }
    else {
        $before = "";
    }


    if (isset($matches[2][0])) {
        $after = $matches[2][0];
    }
    else {
        $after = "";
    }

但我认为两者都不是最佳的东西,你有更好的主意吗?

4

3 回答 3

2

使用explode

$result = explode(':', $string, 2);
if (count($result) == 1) {
    $before = $after = "";
}
else {
    $before = $result[0];
    $after = $result[1];
}
于 2013-03-05T22:35:21.233 回答
1

这个单线应该工作。

list($before, $after) = array_pad(explode(':', $string, 2), 2, '');
于 2013-03-05T22:37:45.900 回答
0

另一种选择是:

$before = $after = '';
$str = "aa:ss:dd:44";
$ar_fields = explode( ":", $str, 2 );
if ( count( $ar_fields ) > 1 ) {
    $before = $ar_fields[0];
    $after = $ar_fields[1];
}
于 2013-03-05T22:37:48.267 回答