2016-09-16 3 views
-1

Я хочу, чтобы разделить строку в массиве, как показано ниже: например это значение приходит в цикле ЕогеаспPHP: разбить строку с рисунком prematch

массив («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

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) 
1

Вместо использования preg_match вы можете использовать preg_split нарезать каждую строку в позиции не следует цифра:

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

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

После небольших изменений он работает для меня, спасибо за ваши усилия –

Смежные вопросы