2012-06-01 11 views
1

我从Flex发送数组到我的PHP脚本。 要拆分的字符串就像[F1,3,true] [Urg,4,false] 我想使用这些信息将记录更新到mySql数据库中。将字符串拆分为数组和模式

例如[F1,3,true]是类似这样的记录[Name,Id,Visible]。

但我没有如何拆分使用信息。

感谢您的帮助

+2

为什么不发送json数据或其他一些可串行化的数据格式? – tigrang

回答

0

如果你真的坚持这种格式,你可以尝试的preg_match。

$string = '[F1, 3, true][Urg, 4, false][asd,  1337, TrUe]'; 
preg_match_all('/\[(\w+),\s*?(\d+),\s*?(true|false)\]/i', $string, $matches, PREG_SET_ORDER); 

用这个,你将得到一个二维数组,数组中的每个元素都是一个数组。每个数组中的第一个元素是匹配数据行,以下元素是解析的数据。 这些元素可以用任意数量的空白字符分隔,布尔值的大小并不重要。

+0

我尝试使用你的解释,但$匹配是空的。我测试$ arrayTest = $ matches [0] [0]。 “,”。 $比赛[0] [1]; 结果只有逗号。你知道为什么吗? – Flex60460

+0

您的数据未按照您指定的格式到达。看看http://codepad.viper-7.com/rE2CD2看到一个工作的例子。 – clentfort

0

可以删除括号:

$txt = substr($txt, 1, -1); 

而且爆炸:

$array = explode(',', $txt) 
0

我希望没有逗号,括号中的数据字符串 - 这可能使这不可能的!但是,假设有没有那些:

preg_match_all('/\[([^\]]*)\]/', $text, $matches); 
return array_map(function($match) { 
    return array_map('trim', explode(',', $match)); 
}, $matches[1]); 

(一个使用了闭,这是只有在PHP 5.3及更高版本支持;如果你是一个老版本,你可以很容易地将其更改为一个foreach循环。 )

+0

使用此功能,可以将数组中的结果作为单个元素数组的第一个元素。 – clentfort

+0

对不起,没有正确使用'preg_match_all'。现在已经修复了。 – Brilliand

+0

@clentfort:结果应该是一个二维数组。如果你只提供一行数据,那么是的,你将得到一个包含一个数组的数组。 – Brilliand