2016-01-20 119 views
1

我有以下代码:PHP:preg_match_all() - 分割阵列

$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和ARRAY3。因此,这将划分取决于标签阵列内{}

`array1` will be `array("ok1", "ok2")`; 
`array2` will be `array("ok3", "ok4")`; 
`array3` will be `array("ok5", "ok6")`; 
+5

是不是JSON?为什么不使用http://php.net/manual/en/function.json-decode.php? – chris85

+0

我从我写的数据库中取出一个结构,我不知道JSON做了同样的顺序。你有任何想法如何使它与PHP或JSON与上述不同的阵列工作? –

回答

1

一种矫枉过正,但你可以确实有两个正则表达式实现它,以及(如果这是不是有些JSON代码):

<?php 
$string = '{"ok1", "ok2"}, {"ok3", "ok4"}, {"ok5", "ok6"}'; 
$regex = '~(?<=}),\s~'; 
$result = array(); 
$parts = preg_split($regex, $string); 
foreach ($parts as $part) { 
    preg_match_all('~"(?<values>[^"]+)"~', $part, $elements); 
    $result[] = $elements["values"]; 
} 
echo $result[0][1]; // ok2 
?> 
+0

我试过了代码,它确实输出了你提到的数组,但是当我做$ elements [“value”] [0]时,它输出“ok1ok3ok5”。但是如果你有一个更好更简单的例子并且对此有所修正,因为我想为每个数组提供信息,那将是一个伟大的人。无论如何,谢谢你!编辑:容易在你的解释,它可以通过两个正则表达式实现:) –

+1

@ J.Doe:看到我更新的答案,所有值现在在'$ result'中。 – Jan

+1

像你这样的人照亮StackOverFlow,保持它去兄弟!谢谢:) –

1

扬的回答是很好的,我只是在这里张贴我的一样以不同的方式使用正则表达式来解决这个问题 - 不采取从他的回答了。

如果你有一个像这样的字符串:

$output_array = array(); 
$str = '{"ok1", "ok2", "ok9", "ok11"}, 
     {"ok3", "ok4"}, 
     {"ok5", "ok6", "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); 

这会给你一个这样的数组:

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" 
     ) 

) 
+0

对不起,对于迟到的答案,但感谢你的代码,赞赏队友! –