2016-09-16 16 views
-1

我想在阵列分割字符串像下面的例子: 这些值进来foreach循环PHP:分割字符串预匹配图案

阵列(“11222S”,“11222M”,“11222”);

我需要以下的输出:

Array 
(
    [0] => Array 
     (
      [0] => 11222 
      [1] => S 
     ) 

) 

Array 
(
    [0] => Array 
     (
      [0] => 11222 
      [1] => M 
     ) 

) 

Array 
(
    [0] => Array 
     (
      [0] => 11222 
      [1] => 
     ) 

) 

请帮助我如何分割它。

我已经努力之下,但没有得到结果: -

preg_match_all('!\d+!', $value, $matches); 

回答

0

模式可以改变,因此试试这个:

$startArray = array('11222S', '11222M', '11222');//but pattern can change 
$count = count($startArray);  

$master_array = array(); //hold the split values 

for($i = 0; $i < $count; $i++) { 

    $numericPiece = preg_replace("/\D*/", "", $startArray[$i]); 
    $alphaPiece = preg_replace("/\d*/", "", $startArray[$i]); 

    $master_array[] = array($numericPiece, $alphaPiece); 

} 
+0

pa ttern可能是不同的,如:'1501GR 1501BLK 1501' –

+0

确定 - 将编辑我的解决方案 –

+0

编辑我的解决方案 –

0

您可以尝试的foreach()preg_replace()组合,如下图所示。您也可以Quick-Test it Here

<?php 
    $array   = [ 
         "11222STV", 
         "11222M", 
         "18742KUM", 
         "11222", 
    ]; 
    $splitArray  = []; 
    foreach($array as $k=>$v){ 
     $tmp   = []; 
     $number   = (int)preg_replace("#([A-Z]*?)#", "", $v); 
     $char   = preg_replace("#(\d*?)#",   "", $v); 
     $tmp[]   = ($number) ? $number : ""; 
     $tmp[]   = ($char) ? $char  : ""; 
     $splitArray[] = $tmp; 
    } 

    var_dump($splitArray); 

以上的产率的var_dump()

array (size=4) 
     0 => 
     array (size=2) 
      0 => int 11222 
      1 => string 'STV' (length=3) 
     1 => 
     array (size=2) 
      0 => int 11222 
      1 => string 'M' (length=1) 
     2 => 
     array (size=2) 
      0 => int 18742 
      1 => string 'KUM' (length=3) 
     3 => 
     array (size=2) 
      0 => int 11222 
      1 => string '' (length=0) 
1

代替使用preg_match的可以使用preg_split在不后跟数字的位置向切片中的每一字符串:

$arr = ['11222S', '11222M', '11222']; 

$res = array_map(function ($i) { return preg_split('~(?!\d)~', $i, 2); }, $arr); 
+0

工作对我来说变化不大后,感谢你的努力 –