PHP - 根据字符串的分隔符创建多维数组
问题描述:
我要拆分的以下文字: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
我不能修改函数来获得结果到一个数组,甚至一个简单的字符串。我完全卡住了。任何想法?
答
您只需将项目添加到结果数组,而不是呼应,也可以增加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);
它的工作原理,这是非常聪明的。感谢您的帮助! – Jeremie 2015-04-02 15:54:29