我有字符串,字符串可能包含0或更多冒号“:”
我需要拆分此字符串并获取2个变量:
1)$before
=第一次冒号前的字符串
2)$after
=第一次冒号后的字符串
如果字符串不包含冒号,$before
和$after
必须为空字符串
即aa:ss:dd:44
$before = aa
和$after = ss:dd:44
我有2个想法,怎么做:
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 = "";
}
但我认为两者都不是最佳的,你有更好的想法吗?
答案 0 :(得分:2)
使用explode
:
$result = explode(':', $string, 2);
if (count($result) == 1) {
$before = $after = "";
}
else {
$before = $result[0];
$after = $result[1];
}
答案 1 :(得分:1)
这个单行应该可以工作。
list($before, $after) = array_pad(explode(':', $string, 2), 2, '');
答案 2 :(得分: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];
}