3

但是,当字符串在括号中包含项目时,我想创建多维数组时,我正在尝试将字符串转换为数组。

例如,如果通过的字符串: (Mary Poppins) Umbrella (Color Yellow)

我想创建一个如下所示的数组:

Array ( [0] => Array ( [0] => mary [1] => poppins) [1] => umbrella [2] => Array ( [0] => color [1] => yellow) )

我能够通过以下方式将数据放入数组中:

preg_match_all('/\(([A-Za-z0-9 ]+?)\)/', stripslashes($_GET['q']), $subqueries); 

但是我无法将项目放置在多维数组中。

有任何想法吗?

4

1 回答 1

6

使用一些 PHP-Fu:

$string = '(Mary Poppens) Umbrella (Color Yellow)';
$array = array();
preg_replace_callback('#\((.*?)\)|[^()]+#', function($m)use(&$array){
    if(isset($m[1])){
        $array[] = explode(' ', $m[1]);
    }else{
        $array[] = trim($m[0]);
    }
}, $string);
print_r($array);

输出:

Array
(
    [0] => Array
        (
            [0] => Mary
            [1] => Poppens
        )

    [1] => Umbrella 
    [2] => Array
        (
            [0] => Color
            [1] => Yellow
        )

)

在线演示

请注意,您需要 PHP 5.3+,因为我使用的是匿名函数。


兼容了吗?

$string = '(Mary Poppens) Umbrella (Color Yellow)';

preg_match_all('#\((.*?)\)|[^()]+#', $string, $match, PREG_SET_ORDER);

foreach($match as $m){
    if(isset($m[1])){
        $array[] = explode(' ', $m[1]);
    }else{
        $array[] = trim($m[0]);
    }
}

print_r($array);

在线演示

在 PHP 4.3+ 上测试

于 2013-06-07T16:18:26.927 回答