2014-10-29 2 views
0

Можно ли преобразовать следующую строку в массив с PHP и preg_match_all, например;PHP RegEx разделен на двумерный массив?

Строка всегда будет иметь один символ и число, за которым следует пробел.

String: "C1 X2 B10" 

$array[0][type]=>"C" 

$array[0][number]=>1 

$array[1][type]=>"X" 

$array[1][number]=>2 

$array[2][type]=>"B" 

$array[2][number]=>10 
+1

Вам действительно не нужно регулярное выражение, чтобы это сделать ... вы можете просто взорвать строку на «" (пробел), а затем отделить буквы от цифр и создать свой массив :) –

+0

Я изменил свой оригинальный вопрос и добавили, какие изменения будут в строке. – aevans

ответ

0

Вы можете использовать именованные группы в своем регулярном выражении:

$str = "C1 X2 B10"; 
$re = '~(?P<type>[A-Z])(?P<number>\d+)~'; 
preg_match_all($re, $str, $m, PREG_SET_ORDER); 
print_r($m); 

который дает

Array 
(
    [0] => Array 
     (
      [0] => C1 
      [type] => C 
      [1] => C 
      [number] => 1 
      [2] => 1 
     ) 

    [1] => Array 
     (
      [0] => X2 
      [type] => X 
      [1] => X 
      [number] => 2 
      [2] => 2 
     ) 

    etc 

так что вы можете использовать $m[1]['type'] непосредственно.

+0

отлично, спасибо, это то, что я был после. – aevans

0

Конечно, вы всегда можете использовать регулярное выражение для этого, которое WAAAAY быстрее, но я хотел бы показать вам, что вы можете сделать это без регулярных выражений. Есть больше способов решить проблему. Как Харви Спектра, персонаж из «Костюмы» сказал бы: «Если кто-то указывает пистолет к голове, есть 146 способов, вы можете защитить себя»;)

Вот ... попробуй это:

$string = 'C1 X2 B10'; 

$explode = explode(' ', $string); 

$i = 0; 
foreach ($explode as $exp){ 
    $number = substr($exp, 1); 
    $letter = substr($exp, 0, 1); 
    $array[$i]['type'] = $letter; 
    $array[$i]['number'] = $number; 

    $i++; 
} 

echo '<pre>'; 
print_r($array); 
echo '</pre>'; 

выход будет:

Array 
(
    [0] => Array 
     (
      [type] => C 
      [number] => 1 
     ) 

    [1] => Array 
     (
      [type] => X 
      [number] => 2 
     ) 

    [2] => Array 
     (
      [type] => B 
      [number] => 10 
     ) 

) 

ВНИМАНИЕ !! Это решение будет работать только в том случае, если у вас есть только 1 буква, только в начале, с элементами, разделенными пробелом в строке!

Надеюсь, это поможет! : D

+0

спасибо, это работает, было бы неплохо использовать регулярное выражение, но это определенно рабочая альтернатива. – aevans

+0

:) рад помочь! Пожалуйста, примите ответ, чтобы вопрос мог быть отмечен как [решенный] SO-модами :) –

+0

К сожалению, его не решили, поскольку я хотел бы сделать это с выражением регулярного выражения, моды, похоже, удалили эту часть вопроса! – aevans