如何在php中将字符串拆分为多个数组?

如何在php中将字符串拆分为多个数组?,php,arrays,string,split,grouping,Php,Arrays,String,Split,Grouping,我有这样的字符串:$string=1A1R0A,我想将该$string拆分为两个数组: array1 ( [0] => 1 [1] => 1 [2] => 0 ) array2 ( [0] => A [1] => R [2] => A ) 你能帮我做那件事吗 我试过像这样使用str_split: $subs = str_split($string,1); Array ( [0] => 1

我有这样的字符串:$string=1A1R0A,我想将该$string拆分为两个数组:

array1 ( 
    [0] => 1
    [1] => 1
    [2] => 0
)

array2 (
    [0] => A
    [1] => R
    [2] => A
)
你能帮我做那件事吗

我试过像这样使用str_split:

$subs = str_split($string,1);
Array ( 
    [0] => 1 
    [1] => A 
    [2] => 0 
    [3] => R 
    [4] => 1 
    [5] => A 
) 
但它不起作用,因为它将使数组如下所示:

$subs = str_split($string,1);
Array ( 
    [0] => 1 
    [1] => A 
    [2] => 0 
    [3] => R 
    [4] => 1 
    [5] => A 
) 
德莫

Démo

您可以使用array_filter来过滤数组,并保持相同的字符索引和str_split来实现这一点。然后只要返回字符是否为数字即可

这也会将它们的实际索引点保留在原始字符串中

通过维护char索引,您可以确定数值在字符串中的位置

foreach($arr->numeric as $key => $value) {
    $pos = ++$key;
    echo "{$value} is position {$pos} in the String.";
}
您可以使用array_filter来过滤数组,并保持相同的char indexs和str_split来实现这一点。然后只要返回字符是否为数字即可

这也会将它们的实际索引点保留在原始字符串中

通过维护char索引,您可以确定数值在字符串中的位置

foreach($arr->numeric as $key => $value) {
    $pos = ++$key;
    echo "{$value} is position {$pos} in the String.";
}

您可以使用正则表达式匹配后跟非数字的所有数字模式

preg_match_all('/(\d+)(\D+)/', $string, $matches);
您的数字/字母数组将出现在匹配项中。您可以直接在$matches[1]和$matches[2]中使用它们,或者将它们提取为更可读的格式

$result = array_combine(['numbers', 'letters'], array_slice($matches, 1));

您可以使用正则表达式匹配后跟非数字的所有数字模式

preg_match_all('/(\d+)(\D+)/', $string, $matches);
您的数字/字母数组将出现在匹配项中。您可以直接在$matches[1]和$matches[2]中使用它们,或者将它们提取为更可读的格式

$result = array_combine(['numbers', 'letters'], array_slice($matches, 1));
preg_match_all提供了一种无循环的直接、单功能技术

捕获数字$out[1]并将字母存储在与$out[0]匹配的完整字符串中。在$out中没有不必要的子数组

代码:

输出:

array (
  0 => 
  array (
    0 => '1',
    1 => '1',
    2 => '0',
  ),
  1 => 
  array (
    0 => 'A',
    1 => 'R',
    2 => 'A',
  ),
)
--- or ---
array (
  0 => '1',
  1 => '1',
  2 => '0',
)
array (
  0 => 'A',
  1 => 'R',
  2 => 'A',
)
array (
  0 => 
  array (
    0 => '1',
    1 => '2',
    2 => '3',
    3 => '4',
  ),
  1 => 
  array (
    0 => 'B',
    1 => 'A',
    2 => 'R',
    3 => 'C',
    4 => 'D',
  ),
)
如果您的字符串可能以字母开头,或者您的字母数字序列不能保证交替,则可以使用此直接技术来分隔这两个字符类别

代码:

输出:

array (
  0 => 
  array (
    0 => '1',
    1 => '1',
    2 => '0',
  ),
  1 => 
  array (
    0 => 'A',
    1 => 'R',
    2 => 'A',
  ),
)
--- or ---
array (
  0 => '1',
  1 => '1',
  2 => '0',
)
array (
  0 => 'A',
  1 => 'R',
  2 => 'A',
)
array (
  0 => 
  array (
    0 => '1',
    1 => '2',
    2 => '3',
    3 => '4',
  ),
  1 => 
  array (
    0 => 'B',
    1 => 'A',
    2 => 'R',
    3 => 'C',
    4 => 'D',
  ),
)
preg_match_all提供了一种无循环的直接、单功能技术

捕获数字$out[1]并将字母存储在与$out[0]匹配的完整字符串中。在$out中没有不必要的子数组

代码:

输出:

array (
  0 => 
  array (
    0 => '1',
    1 => '1',
    2 => '0',
  ),
  1 => 
  array (
    0 => 'A',
    1 => 'R',
    2 => 'A',
  ),
)
--- or ---
array (
  0 => '1',
  1 => '1',
  2 => '0',
)
array (
  0 => 'A',
  1 => 'R',
  2 => 'A',
)
array (
  0 => 
  array (
    0 => '1',
    1 => '2',
    2 => '3',
    3 => '4',
  ),
  1 => 
  array (
    0 => 'B',
    1 => 'A',
    2 => 'R',
    3 => 'C',
    4 => 'D',
  ),
)
如果您的字符串可能以字母开头,或者您的字母数字序列不能保证交替,则可以使用此直接技术来分隔这两个字符类别

代码:

输出:

array (
  0 => 
  array (
    0 => '1',
    1 => '1',
    2 => '0',
  ),
  1 => 
  array (
    0 => 'A',
    1 => 'R',
    2 => 'A',
  ),
)
--- or ---
array (
  0 => '1',
  1 => '1',
  2 => '0',
)
array (
  0 => 'A',
  1 => 'R',
  2 => 'A',
)
array (
  0 => 
  array (
    0 => '1',
    1 => '2',
    2 => '3',
    3 => '4',
  ),
  1 => 
  array (
    0 => 'B',
    1 => 'A',
    2 => 'R',
    3 => 'C',
    4 => 'D',
  ),
)

@汉恩:字母和数字总是交替的吗?只有一个示例字符串,我们只能猜测。@hann字母和数字总是交替的吗?只有一个示例字符串,我们只能猜测。