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

时间:2019-06-25 14:58:06

标签: php excel codeigniter phpexcel

我有这样的字符串:$string = "1A1R0A",我想将$ string分成2个数组:

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 
) 

4 个答案:

答案 0 :(得分:3)

您可以使用| User Email | Result | | example@example.com | message | 来过滤数组并保持相同的char索引,而使用array_filter可以实现此目的。然后只需简单地返回是否有字符str_split

这还将把它们的实际索引点保留在原始字符串中。

Live demo

is_numeric

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

$str = "1A1R0A";

$arr = (object) array(
    'numeric' => array_filter(str_split($str), function($char) {
        return is_numeric($char);
    }),
    'character' => array_filter(str_split($str), function($char) {
        return !is_numeric($char);
    }),
);

// $arr->numeric will hold numeric values
// $arr->character will hold ascii values

答案 1 :(得分:2)

您可以使用正则表达式来匹配所有数字模式,然后是非数字。

preg_match_all('/(\d+)(\D+)/', $string, $matches);

您的数字/字母数组将出现在比赛中。您可以直接以$matches[1]$matches[2]的形式使用它们,也可以将它们提取为更具可读性的格式。

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

答案 2 :(得分:1)

$string = "1A1R0A";
$array = str_split($string);

$int_array = [];
$str_array = [];
foreach ($array as $char) {
     if (is_numeric($char)) $int_array[] = $char;
     else $str_array[] = $char;
}

Démohere

答案 3 :(得分:0)

preg_match_all()提供了一种无需循环的直接单功能技术。

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

代码:(Demo

$string = "1A1R0A";
var_export(preg_match_all('~(\d)\K\D~', $string, $out) ? [$out[1], $out[0]] : [[], []]);

echo "\n--- or ---\n";

[$letters, $numbers] = preg_match_all('~(\d)\K\D~', $string, $out) ? $out : [[], []];
var_export($numbers);
echo "\n";
var_export($letters);

输出:

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',
)

如果您的字符串可能以字母开头,或者不能保证字母数字序列可以交替使用,则可以使用此直接方法来分隔两个字符类别。

代码:(Demo

$string = "B1A23R4CD";
$output = [[], []]; // ensures that the numbers array comes first
foreach (str_split($string) as $char) {
    $output[ctype_alpha($char)][] = $char;
    //      ^^^^^^^^^^^^^^^^^^- false is 0, true is 1
}

var_export($output);

输出:

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