在不同的字符出现时将字符串转换为数组

Ibr*_*mar 3 php arrays split duplicates

考虑我有这个字符串'aaaabbbaaaaaabbbb'我想将其转换为数组,以便我得到以下结果

$array = [
    'aaaa',
    'bbb',
    'aaaaaa',
    'bbbb'   
]
Run Code Online (Sandbox Code Playgroud)

如何在PHP中解决这个问题?

Sah*_*ati 5

PHP代码演示

正则表达式: (.)\1{1,}

(.):匹配并捕获单个字符.

\1:这将包含第一场比赛

\1{1,}:使用匹配的字符一次或多次.

<?php
ini_set("display_errors", 1);
$string="aaaabbbaaaaaabbbb";
preg_match_all('/(.)\1{1,}/', $string,$matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)

输出:

Array
(
    [0] => Array
        (
            [0] => aaaa
            [1] => bbb
            [2] => aaaaaa
            [3] => bbbb
        )

[1] => Array
    (
        [0] => a
        [1] => b
        [2] => a
        [3] => b
    )

)
Run Code Online (Sandbox Code Playgroud)

要么:

PHP代码演示

<?php
$string="aaaabbbaaaaaabbbb";
$array=str_split($string);
$start=0;
$end=  strlen($string);
$indexValue=$array[0];
$result=array();
$resultantArray=array();
while($start!=$end)
{
    if($indexValue==$array[$start])
    {
        $result[]=$array[$start];
    }
    else
    {
        $resultantArray[]=implode("", $result);
        $result=array();

        $result[]=$indexValue=$array[$start];
    }
    $start++;
}
$resultantArray[]=implode("", $result);
print_r($resultantArray);
Run Code Online (Sandbox Code Playgroud)

输出:

Array
(
    [0] => aaaa
    [1] => bbb
    [2] => aaaaaa
    [3] => bbbb
)
Run Code Online (Sandbox Code Playgroud)