Php 使用物化路径将平面数组转换为嵌套数组
我有一些类别需要转换为嵌套数组树。我使用物化路径生成一棵树,我使用PHP。这是我的照片:Php 使用物化路径将平面数组转换为嵌套数组,php,arrays,mongodb,materialized-path-pattern,Php,Arrays,Mongodb,Materialized Path Pattern,我有一些类别需要转换为嵌套数组树。我使用物化路径生成一棵树,我使用PHP。这是我的照片: Array ( [0] => Array ( [_id] => mac [name] => Mac [path] => null ) [1] => Array ( [_id] => ipod
Array
(
[0] => Array
(
[_id] => mac
[name] => Mac
[path] => null
)
[1] => Array
(
[_id] => ipod
[name] => iPod
[path] => null
)
[2] => Array
(
[_id] => imac
[name] => iMac
[path] => ,mac,
)
[3] => Array
(
[_id] => imac2001
[name] => iMac 2001
[path] => ,mac,imac,
)
[4] => Array
(
[_id] => imac2002
[name] => iMac 2002
[path] => ,mac,imac,
)
[5] => Array
(
[_id] => imac2003
[name] => iMac 2003
[path] => ,mac,imac,
)
)
我试图做到这一点,但我完全沉浸在递归函数的概念中
更新:
以下是我最终想要的:
Array
(
[0] => Array
(
[_id] => mac
[name] => Mac
[path] => null
[children] =>
[0] => Array
(
[_id] => imac
[name] => iMac
[path] => ,mac,
[children] =>
[0] => Array
(
[_id] => imac2001
[name] => iMac 2001
[path] => ,mac,imac,
)
[1] => Array
(
[_id] => imac2002
[name] => iMac 2002
[path] => ,mac,imac,
)
[2] => Array
(
[_id] => imac2003
[name] => iMac 2003
[path] => ,mac,imac,
)
)
)
[1] => Array
(
[_id] => ipod
[name] => iPod
[path] => null
)
)
我想向您展示我已经编写的代码,但它远没有起作用,因此在我看来没有什么好东西可看。我找到了一个解决方案。它对我有用,所以它在这里:
<?php
$categories = Array
(
[0] => Array
(
["_id"] => "mac"
["name"] => "Mac"
["path"] => null
)
[1] => Array
(
["_id"] => "ipod"
["name"] => "iPod"
["path"] => null
)
[2] => Array
(
["_id"] => "imac"
["name"] => "iMac"
["path"] => ",mac,"
)
[3] => Array
(
["_id"] => "imac2001"
["name"] => "iMac 2001"
["path"] => ",mac,imac,"
)
[4] => Array
(
["_id"] => "imac2002"
["name"] => "iMac 2002"
["path"] => ",mac,imac,"
)
[5] => Array
(
["_id"] => "imac2003"
["name"] => "iMac 2003"
["path"] => ",mac,imac,"
)
)
$categoriesNested = sortTree($categories);
function sortTree(&$categories, $parent = null)
{
$result = array();
foreach($categories as $key => $cat)
{
if($parent == null)
{
$temp = $cat;
unset($categories[$key]);
$temp["children"] = $this->sortTree($categories, $cat);
$result[] = $temp;
}
else
{
$tempPath = array_values(array_filter(explode(',', $cat["path"])));
$directParent = array_pop($tempPath);
if ($parent["_id"] == $directParent)
{
$temp = $cat;
unset($categories[$key]);
$temp["children"] = $this->sortTree($categories, $cat);
$result[] = $temp;
}
}
}
if (empty($result))
return null;
else
return $result;
}
我们看看你有什么。但问题是:你需要什么,你做了什么?好吧,我更新了我的帖子。它必须是数组还是也可以是对象?另外,数组的顺序是否总是正确的?那么这两条路是互相衔接的?