php tree 函数 level

PHP是一种脚本语言,它的应用覆盖面很广,几乎涉及到了所有与Web相关的领域。树是一种经常用到的数据结构,所以PHP中也提供了相应的树函数。

其中,tree函数主要用于将一个数组按照层级关系展示出来。它的参数如下:

```php

tree(array $arr, $idKey = 'id', $parentKey = 'parent_id', $childKey = 'children')

```

其中,$arr表示要转换成树形结构的数组;$idKey是指具有唯一标识的键名,默认为'id';$parentKey是指父子关系的键名,默认为'parent_id';$childKey是指该节点的子节点数组键名,默认为'children'。

该函数返回一个树形结构的数组,其中每个节点都带有子节点数组。例如:

```php

$input = [

['id' => 1, 'parent_id' => 0],

['id' => 2, 'parent_id' => 1],

['id' => 3, 'parent_id' => 1],

['id' => 4, 'parent_id' => 2],

['id' => 5, 'parent_id' => 2],

['id' => 6, 'parent_id' => 3],

['id' => 7, 'parent_id' => 3],

];

$output = tree($input);

/*

输出如下所示:

[

[

'id' => 1,

'parent_id' => 0,

'children' => [

[

'id' => 2,

'parent_id' => 1,

'children' => [

['id' => 4, 'parent_id' => 2, 'children' => []],

['id' => 5, 'parent_id' => 2, 'children' => []],

]

],

[

'id' => 3,

'parent_id' => 1,

'children' => [

['id' => 6, 'parent_id' => 3, 'children' => []],

['id' => 7, 'parent_id' => 3, 'children' => []],

]

],

]

]

]

*/

```

其中,因为输入的数组中没有根节点,所以输入是一个叶节点数组;输出是一个根节点数组。

不过有时候我们可能需要对某个节点进行操作,例如在某个节点上标记一下是否符合条件,可以使用PHP中的回调函数来实现。

回调函数是指可以传递到其他函数中作为参数的一段可执行代码。在PHP中,可以使用闭包来定义回调函数。闭包是一种匿名函数,它可以访问外部函数作用域中的变量和函数。

在调用tree函数时,可以传递一个闭包函数作为参数,这个闭包函数接收一个参数,表示当前遍历到的节点,就可以在这个闭包函数中对节点进行操作。例如:

```php

$input = [

['id' => 1, 'parent_id' => 0],

['id' => 2, 'parent_id' => 1],

['id' => 3, 'parent_id' => 1],

['id' => 4, 'parent_id' => 2],

['id' => 5, 'parent_id' => 2],

['id' => 6, 'parent_id' => 3],

['id' => 7, 'parent_id' => 3],

];

$output = tree($input, 'id', 'parent_id', 'children', function($node) {

if ($node['id'] % 2 == 0) {

$node['is_even'] = true;

} else {

$node['is_even'] = false;

}

return $node;

});

/*

输出如下所示:

[

[

'id' => 1,

'parent_id' => 0,

'children' => [

[

'id' => 2,

'parent_id' => 1,

'is_even' => true,

'children' => [

['id' => 4, 'parent_id' => 2, 'is_even' => true, 'children' => []],

['id' => 5, 'parent_id' => 2, 'is_even' => false, 'children' => []],

]

],

[

'id' => 3,

'parent_id' => 1,

'is_even' => false,

'children' => [

['id' => 6, 'parent_id' => 3, 'is_even' => true, 'children' => []],

['id' => 7, 'parent_id' => 3, 'is_even' => false, 'children' => []],

]

],

]

]

]

*/

```

其中,在闭包函数中先对节点进行操作,这里是加上了一个'is_even'属性,表示该节点的'id'是否为偶数。最后将修改后的节点返回即可。

除了以上例子,我们也可以通过回调函数计算当前节点处于第几层级。例如:

```php

$input = [

['id' => 1, 'parent_id' => 0],

['id' => 2, 'parent_id' => 1],

['id' => 3, 'parent_id' => 1],

['id' => 4, 'parent_id' => 2],

['id' => 5, 'parent_id' => 2],

['id' => 6, 'parent_id' => 3],

['id' => 7, 'parent_id' => 3],

];

$output = tree($input, 'id', 'parent_id', 'children', function($node, $level) {

$node['level'] = $level;

return $node;

});

/*

输出如下所示:

[

[

'id' => 1,

'parent_id' => 0,

'level' => 0,

'children' => [

[

'id' => 2,

'parent_id' => 1,

'level' => 1,

'children' => [

['id' => 4, 'parent_id' => 2, 'level' => 2, 'children' => []],

['id' => 5, 'parent_id' => 2, 'level' => 2, 'children' => []],

]

],

[

'id' => 3,

'parent_id' => 1,

'level' => 1,

'children' => [

['id' => 6, 'parent_id' => 3, 'level' => 2, 'children' => []],

['id' => 7, 'parent_id' => 3, 'level' => 2, 'children' => []],

]

],

]

]

]

*/

```

其中,在闭包函数中新增了一个$level参数,表示当前节点所处的层级。将修改后的节点返回即可。

总的来说,PHP中的tree函数很实用,也很灵活,可以通过传递不同的参数来实现不同的功能。同时,支持回调函数也使其更加强大。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.ynyuzhu.com/

点赞(48) 打赏

评论列表 共有 2 条评论

这世间有爱ゾ 1年前 回复TA

正月初五财神到,开门撞见财神笑,吉祥云朵迎头绕,抬头见喜福星照,迎面寿星鸿运报,龙年捡财不弯腰,元宝统统家中跑,祝福多多胜钞票,记得微笑哟!

牵手看日落 1年前 回复TA

洋兴叹的人,永远达不到成功的彼岸。

立即
投稿
发表
评论
返回
顶部