繁体   English   中英

PHP:preg_match_all()-分割数组

[英]PHP: preg_match_all() - divide an array

我有以下代码:

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

它工作完美,但我想使其成为array1,array2和array3。 因此,它将根据{}的标签对数组进行划分

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

有点过头了,但是您确实也可以使用两个正则表达式来实现(如果这不是一些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
?>

Jan的回答非常好,我只在这里发布我的信息,这是使用正则表达式解决问题的另一种方式-并不能摆脱他的回答。

如果您有这样的字符串:

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

)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM