0

我的数据库中的查询结果返回如下内容(每行的记录):

1.
1.1.
1.1.01.
1.1.01.001
1.2.
1.2.01.
1.2.02.

我正在尝试创建以树格式返回多维数组的东西,如下所示:

array(
    '1.' => array(
        '1.1' => array(
            '1.1.01.' => array(
                (int) 0 => '1.1.01.001'
            )
        ),
        '1.2' => array(
            (int) 0 => '1.2.01.',
            (int) 1 => '1.2.02.'
        )
    )
)

我能想到的就是使用explode().

我很感激任何建议。

4

1 回答 1

2

您的格式非常棘手,因为:

1.2.
1.2.01.     |
1.2.02.     V  Making this array instead of value 

你可以试试

$string = "1.
1.1.
1.1.01.
1.1.01.001
1.2.
1.2.01.
1.2.02.";

$array = explode("\n", $string);
$data = array();
$temp = &$data;

$it = new CachingIterator(new ArrayIterator($array), CachingIterator::FULL_CACHE);
$continue = false;
foreach ( $it as $v ) {
    $v = trim($v);
    if ($it->hasNext()) {
        $next = trim($it->getInnerIterator()->current());
        if (stripos($next, $v) === 0) {
            $temp = &$temp[$v];
        } else {
            $temp[] = $v;
            if (strlen($next) != strlen($v)) {
                $temp = &$data;
            }
        }
    } else {
        $temp[] = $v;
    }
}
print_r($data);

输出

Array
(
    [1.] => Array
        (
            [1.1.] => Array
                (
                    [1.1.01.] => Array
                        (
                            [0] => 1.1.01.001
                        )

                )

        )

    [1.2.] => Array
        (
            [0] => 1.2.01.
            [1] => 1.2.02.
        )

)

这是一个移动 COMPLEX 演示

于 2013-02-25T16:04:32.633 回答