2015-04-02 65 views
0

我要拆分的以下文字:PHP - 根据字符串的分隔符创建多维数组

“一些文字[444 [B [C1] [C2] d] E] [测试]更多的文本”

到嵌套阵列:

Array 
(
    [0] => aaa[b[c1][c2]d]e 
    [1] => Array 
     (
      [0] => b[c1][c2]d 
      [1] => Array 
       (
        [0] => c1 
        [1] => c2 
       ) 

     ) 

    [2] => test 
) 

的“recursiveSplit”功能上php手册发现可很好地显示结果。

下面是函数:

function recursiveSplit($string, $layer) { 
    preg_match_all("#\[(([^\[\]]*|(?R))*)\]#", $string, $matches); 
    // iterate thru matches and continue recursive split 
    if (count($matches) > 1) { 
     for ($i = 0; $i < count($matches[1]); $i++) { 
      if (is_string($matches[1][$i])) { 
       if (strlen($matches[1][$i]) > 0) { 
        echo "<pre>Layer ".$layer.": ".$matches[1][$i]."</pre><br />"; 
        recursiveSplit($matches[1][$i], $layer + 1); 
       } 
      } 
     } 
    } 
} 

recursiveSplit($string, 0); 

它显示以下内容:

Layer 0: aaa[b[c1][c2]d]e 

Layer 1: b[c1][c2]d 

Layer 2: c1 

Layer 2: c2 

Layer 0: test 

我不能修改函数来获得结果到一个数组,甚至一个简单的字符串。我完全卡住了。任何想法?

回答

0

您只需将项目添加到结果数组,而不是呼应,也可以增加recursiveSplit调用结果也是如此,这样的:

<?php 
function recursiveSplit($string, $layer) { 
    $result = array(); 
    preg_match_all("#\[(([^\[\]]*|(?R))*)\]#", $string, $matches); 
    // iterate thru matches and continue recursive split 
    if (count($matches) > 1) { 
     for ($i = 0; $i < count($matches[1]); $i++) { 
      if (is_string($matches[1][$i])) { 
       if (strlen($matches[1][$i]) > 0) { 
        $result[] = $matches[1][$i]; 
        echo "<pre>Layer ".$layer.": ".$matches[1][$i]."</pre><br />"; 
        $rec = recursiveSplit($matches[1][$i], $layer + 1); 
        if ($rec) { 
         $result[] = $rec; 
        } 
       } 
      } 
     } 
    } 
    return $result; 
} 
$string = "some text [aaa[b[c1][c2]d]e][test] more text"; 
$result = recursiveSplit($string, 0); 
print_r($result); 
+0

它的工作原理,这是非常聪明的。感谢您的帮助! – Jeremie 2015-04-02 15:54:29

相关问题