2016-09-16 66 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

工作對我來說變化不大後,感謝你的努力 –