2013-03-25 54 views
1

我有来自用户的输入字符串。来自用户的这种输入是不可预测的。这意味着用户可以随意输入任何字符串。 我想筛选匹配下列模式的输入,并返回它作为一个数组从字符串中获取参数并将其转换为数组php

以下这些字符串模式应该作品:

product=bag, product=tshirt, product=shoes 

product=bag status=sold, product=jeans, product=shoes 

product=all 

我会像输出如阵列如下:

Array(
[0] => Array 
    (
    [product] => bag 
    [status] => sold 
) 

[1] => Array 
    (
    [product] => jeans 
) 

[2] => Array 
    (
    [product] => shoes 
) 
) 

我想这可以通过在explode旁边使用preg_match_all()来实现。任何人都可以使用preg_match_all给我例子吗?或者任何其他方式对我来说都是好的,只要是最好的方法。

$string = 'product=bag status=sold, product=tshirt, product=shoes'; 
$m = preg_match_all('/needregexrulehere/', $string, $matches); 
+0

uhhhh ....什么? – jeremy 2013-03-25 20:03:33

+0

@ethrbunny对不起,但他没有使用** e **修饰符:) – HamZa 2013-03-25 20:09:34

+0

澄清:这应该是php函数不是命令行,上面的所有参数都是在变量中定义的。重点是我只是将上面的数组分割为上面的输出。让我知道你是否需要更多澄清。 thx – 2013-03-25 20:21:00

回答

1

你并不需要为这个正则表达式,你可以做这样的事情:

$return = array(); 
foreach(str_getcsv($string) as $line) { 
    parse_str(str_replace(' ' , '&', $line), $temp); 
    $return[] = $temp; 
} 

will output

Array 
(
    [0] => Array 
     (
      [product] => bag 
      [status] => sold 
     ) 

    [1] => Array 
     (
      [product] => tshirt 
     ) 

    [2] => Array 
     (
      [product] => shoes 
     ) 

) 

我会离开的错误检查/输入卫生直到OP。

+0

+1不错,我打算用爆炸()和preg_match()xD – HamZa 2013-03-25 20:22:21

+0

写一个解决方案感谢它的工作! – 2013-03-25 20:38:50

相关问题