Php 如何将树型数组转换为平面数组?
我有一个树状数组,我需要对它进行边缘化或转换为平面数组,但我无法使它工作 我正在尝试使用以下代码:Php 如何将树型数组转换为平面数组?,php,arrays,Php,Arrays,我有一个树状数组,我需要对它进行边缘化或转换为平面数组,但我无法使它工作 我正在尝试使用以下代码: $fakepages = array(); $fakepages[0] = array('id' => 1, 'parent_id' => 0, 'title' => 'Parent Page'); $fakepages[1] = array('id' => 2, 'parent_id' => 1, 'title' => 'Sub Page');
$fakepages = array();
$fakepages[0] = array('id' => 1, 'parent_id' => 0, 'title' => 'Parent Page');
$fakepages[1] = array('id' => 2, 'parent_id' => 1, 'title' => 'Sub Page');
$fakepages[2] = array('id' => 3, 'parent_id' => 2, 'title' => 'Sub Sub Page');
$fakepages[3] = array('id' => 4, 'parent_id' => 3, 'title' => 'Another Parent Page');
$fakepages[4] = array('id' => 5, 'parent_id' => 0, 'title' => 'Another Parent Page 5');
$fakepages[5] = array('id' => 6, 'parent_id' => 2, 'title' => 'Another Parent Page 5');
$tree = $this->buildTree($fakepages);
return $tree;
private function buildTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = $this->buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
这是我的排序(或合并或…?)代码。我的代码有什么问题?我如何解决这个问题并使其与左图中的一样
private function findchild($trees)
{
$arr = array();
foreach ($trees as $tree) {
if (isset($tree['children'])) {
$this->mes[] = ['id'=>$tree['id'],'parent_id'=>$tree['parent_id']];
$arr[] = $this->findchild($tree['children']);
}
else{
$this->mes[] = ['id'=>$tree['id'],'parent_id'=>$tree['parent_id']];
$arr[] = $tree;
}
return $arr;
}
}
private $mes = [];
我有右边的部分,但需要将其转换为左边的部分:
您可以使用这个PHP函数,它假设您的数据是一个标准类对象数组:
function flatten($arr) {
$result = [];
foreach($arr as $item) {
if (isset($item->children))
$result = array_merge($result, flatten($item->children));
unset($item->children);
$result[] = $item;
}
return $result;
}
当然,如果原始值是JSON,则需要首先对其进行解码,然后将其传递给此函数,如下所示:
$arr = json_decode($json);
// Flatten it
$arr = flatten($arr);
// Optionally sort the result
usort($arr, function($a, $b) { return $a->id - $b->id; });
看到它继续运行了吗
如果数据由关联数组(而不是“对象”)组成,则代码需要使用括号表示法,而不是->
:
function flatten($arr) {
$result = [];
foreach($arr as $item) {
if (isset($item['children']))
$result = array_merge($result, flatten($item['children']));
unset($item['children']);
$result[] = $item;
}
return $result;
}
这类:
usort($arr, function($a, $b) { return $a['id'] - $b['id']; });
您可以使用此PHP函数,该函数假定您的数据是一个标准类对象数组:
function flatten($arr) {
$result = [];
foreach($arr as $item) {
if (isset($item->children))
$result = array_merge($result, flatten($item->children));
unset($item->children);
$result[] = $item;
}
return $result;
}
当然,如果原始值是JSON,则需要首先对其进行解码,然后将其传递给此函数,如下所示:
$arr = json_decode($json);
// Flatten it
$arr = flatten($arr);
// Optionally sort the result
usort($arr, function($a, $b) { return $a->id - $b->id; });
看到它继续运行了吗
如果数据由关联数组(而不是“对象”)组成,则代码需要使用括号表示法,而不是->
:
function flatten($arr) {
$result = [];
foreach($arr as $item) {
if (isset($item['children']))
$result = array_merge($result, flatten($item['children']));
unset($item['children']);
$result[] = $item;
}
return $result;
}
这类:
usort($arr, function($a, $b) { return $a['id'] - $b['id']; });
@Dekel我需要将它们保存到数据库并显示给用户。它看起来像PHP代码,但您的标记是javascript/jquery。你在找什么语言?你自己试过写一些代码吗?请以格式化文本而不是代码图像的形式发布代码。任何人都无法复制它来帮助你。也不清楚您试图转换的位置this@Dekel是的,很抱歉,谢谢..@Dekel我需要将它们保存到数据库并向用户显示。它看起来像PHP代码,但您的标记是javascript/jquery。你在找什么语言?你自己试过写一些代码吗?请以格式化文本而不是代码图像的形式发布代码。任何人都无法复制它来帮助你。也不清楚您试图转换的位置this@Dekel是的,对不起,谢谢。你还有问题吗?只需将此代码集成到您的项目中。您仍然有问题吗?只需将此代码集成到您的项目中。