2016-09-16 3 views
-1

prematch 패턴으로 분할 문자열 : 이러한 값 foreach 루프 온PHP : I 예컨대 다음과 같은 배열에 문자열을 분할 할

어레이 ('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

파 ttern있을 수 있습니다 다른 같은'1501GR 1501BLK 1501' –

+0

OK - 당신의 노력에 대한 내 내 솔루션 –

+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) 
대신 preg_match를 사용
1

당신이 다음에 숫자가 아닌 위치에 각각의 문자열을 슬라이스 preg_split를 사용할 수 있습니다

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

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

일을 당신의 노력하지만 편집 솔루션 –