我已从电子表格导入数据。此数据包含格式如下的代码:
1 a
1.1 b
1.2 c
1.2.1 d
1.2.2 e
因此,我想从这种格式中创建基于编号的子datanya。例如1(a)是1.1(b)的父数据,而1.2(c)是1.2.1(d)和1.2.1(e)的父数据。
示例输出将是:
[
'1' => [
'name' => 'A',
'childs' => [
'1.1' => [
'name' => 'B',
],
'1.2' => [
'name' => 'C'
]
]
],
'2' => [
'name' => 'D',
'childs' => [
'2.1' => [
'name' => 'F',
'childs' => [
'2.1.1' => [
'name' => 'G'
]
]
]
]
]
]
如何将数据解析为数组?有什么参考怎么解析呢?似乎找不到合适的关键字。
答案 0 :(得分:0)
这是一种实现方法:
$root = array_reduce(preg_split('~(?:\r?\n|\r)~', $s), function($agg, $v) : array
{
preg_match('~^(\d+(?:\.\d+)*)\s*(.*?)\s*$~', $v, $match);
if(!isset($match[1]))
return $agg;
// rewrite array ['1'.'2'.'3'] as ['1', '1.2', '1.2.3']
$keys = explode('.',$match[1]);
foreach ($keys as $k => $v)
$keys[$k] = implode('.', array_slice($keys, 0, 1+$k));
eval( '$agg' . sprintf(str_repeat('["children"][$keys[%s]]', count($keys)) , ...array_keys($keys) ) . '["name"] = $match[2];' );
return $agg;
}, []);
var_dump($root['children']);