2014-10-29 41 views
0

是否可以使用PHP和preg_match_all将以下字符串转换为数组,例如:PHP正则表达式分割为二维数组?

该字符串将始终是一个字符和数字后跟一个空格。

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

你真的不需要正则表达式来做到这一点......你可以爆炸“”(空格)上的字符串,然后从数字中分离出字母并创建你的数组:) – 2014-10-29 13:16:28

+0

我修改了我原来的问题,增加了字符串的变体。 – aevans 2014-10-29 17:07:41

回答

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 2014-10-30 11:51:29

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 
     ) 

) 

警告!只有在开头只有一个字母的情况下,此解决方案才能正常工作,并且字符串中的元素空间分隔!

希望这会有所帮助! :d

+0

谢谢,这个工程,将是很好的使用正则表达式,但这绝对是一个工作的选择。 – aevans 2014-10-29 14:29:21

+0

:)高兴地帮忙!请接受答案,所以这个问题可以通过SO mods标记为[解决] :) – 2014-10-29 14:34:12

+0

不幸的是它没有解决,因为我想用正则表达式来做这件事,mods似乎已经删除了这部分问题! – aevans 2014-10-30 08:44:03