php explode:通过使用空格分隔符将字符串拆分为单词

2022-08-30 18:25:04
$str = "This is a    string";
$words = explode(" ", $str);

工作正常,但空格仍进入数组:

$words === array ('This', 'is', 'a', '', '', '', 'string');//true

我宁愿只有没有空格的单词,并将有关空格数量的信息分开。

$words === array ('This', 'is', 'a', 'string');//true
$spaces === array(1,1,4);//true

刚刚添加:表示第一个单词后一个空格,第二个单词后一个空格,第三个单词后4个空格。(1, 1, 4)

有什么方法可以快速完成吗?

谢谢。


答案 1

要将 String 拆分为数组,应使用 preg_split

$string = 'This is a    string';
$data   = preg_split('/\s+/', $string);

您的第二部分(计算空格):

$string = 'This is a    string';
preg_match_all('/\s+/', $string, $matches);
$result = array_map('strlen', $matches[0]);// [1, 1, 4]

答案 2

这是一种方法,拆分字符串并运行一次正则表达式,然后解析结果以查看哪些段被捕获为拆分(因此只有空格),或者哪些是单词:

$temp = preg_split('/(\s+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

$spaces = array();
$words = array_reduce( $temp, function( &$result, $item) use ( &$spaces) {
    if( strlen( trim( $item)) === 0) {
        $spaces[] = strlen( $item);
    } else {
        $result[] = $item;
    }
    return $result;
}, array());

从这个演示中可以看出:$words

Array
(
    [0] => This
    [1] => is
    [2] => a
    [3] => string
)

并且是:$spaces

Array
(
    [0] => 1
    [1] => 1
    [2] => 4
)