PHP:preg_match_all()-分割数组
我有以下代码:PHP:preg_match_all()-分割数组,php,arrays,regex,preg-match,Php,Arrays,Regex,Preg Match,我有以下代码: $str = '{"ok1", "ok2"}, {"ok3", "ok4"}, {"ok5", "ok6"}'; preg_match_all('/"([^"]*)"/', $str, $matches); print_r($matches[1]); 哪个输出: Array([0]=>ok1[1]=>ok2[2]=>ok3[3]=>ok4[4]=>ok5[5]=>ok6) 它工作得很完美,但我想把它做成阵列1、阵列2和阵列3。因此,它将根
$str = '{"ok1", "ok2"},
{"ok3", "ok4"},
{"ok5", "ok6"}';
preg_match_all('/"([^"]*)"/', $str, $matches);
print_r($matches[1]);
哪个输出:
Array([0]=>ok1[1]=>ok2[2]=>ok3[3]=>ok4[4]=>ok5[5]=>ok6)
它工作得很完美,但我想把它做成阵列1、阵列2和阵列3。因此,它将根据{}
i、 e
有点过分了,但您确实可以通过两个正则表达式来实现它(如果这不是某个
JSON
code):
Jan的答案非常好,我只是在这里发布我的答案,作为使用正则表达式处理问题的另一种方式,而不是从他的答案中删除 如果您有这样一个字符串:
$output_array = array();
$str = '{"ok1", "ok2", "ok9", "ok11"},
{"ok3", "ok4"},
{"ok5", "ok6", "ok99"}';
Array
(
[0] => Array
(
[0] => "ok1"
[1] => "ok2"
[2] => "ok9"
[3] => "ok11"
)
[1] => Array
(
[0] => "ok3"
[1] => "ok4"
)
[2] => Array
(
[0] => "ok5"
[1] => "ok6"
[2] => "ok99"
)
)
然后,您可以查找所有大括号集,并将它们存储到一个数组中:
preg_match_all('~\{.*?\}~', $str, $matches);
最后,只需循环遍历每一组大括号并匹配出现在引号中的每一组数据。然后将这些匹配项添加到输出数组中
foreach ($matches[0] AS $set) {
preg_match_all('~".*?"~', $set, $set_matches);
$output_array[] = $set_matches[0];
}
print_r($output_array);
这将为您提供如下数组:
$output_array = array();
$str = '{"ok1", "ok2", "ok9", "ok11"},
{"ok3", "ok4"},
{"ok5", "ok6", "ok99"}';
Array
(
[0] => Array
(
[0] => "ok1"
[1] => "ok2"
[2] => "ok9"
[3] => "ok11"
)
[1] => Array
(
[0] => "ok3"
[1] => "ok4"
)
[2] => Array
(
[0] => "ok5"
[1] => "ok6"
[2] => "ok99"
)
)
那不是JSON吗?为什么不使用呢?我从数据库中取出一个结构,我这样写的,我不知道JSON做了同样的顺序。您知道如何使用php或json与上述不同的数组一起工作吗?我尝试了代码,它确实输出了您提到的数组,但当我执行$elements[“value”][0]时,它会输出“ok1ok3ok5”。但是,如果您有一个更好更简单的示例和解决方案,因为我想为每个数组提取信息,那将是一个伟大的人。谢谢你!编辑:很简单,就像你解释的那样,它可以通过两个正则表达式实现:)@J.Doe:请看我更新的答案,所有值现在都在
$result
中。像你这样的人让StackOverFlow变亮了,兄弟,继续吧!谢谢:)@J.Doe:不用担心,很高兴能帮上忙:-)很抱歉回答晚了,但是谢谢你的密码,谢谢你的朋友!