gpt4 book ai didi

php - 创建多维数组的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:45:54 26 4
gpt4 key购买 nike

我正在使用 PHP,我需要帮助来完成一项看似简单的数组任务。

这是我的示例数组:

$arr = array(
0 => NULL,
1 => NULL,
2 => NULL,
3 => NULL,
8 => '2',
9 => '2',
10 => '2',
11 => '2',
12 => '3',
13 => '3',
14 => '8',
15 => '8',
16 => '14',
17 => '14',
18 => '14'
);

数组的键代表ID(唯一)。
这些值是 parentIDs,即父“节点”的 ID。 NULL 表示没有 parentID(即新数组的第一个维度)。

现在,我需要创建一个新的多维数组,其中包含所有子元素的父 ID。 (这听起来可能很困惑,抱歉我缺乏描述能力。下面有一个例子,应该更清楚)

下面是我的示例的新数组在应用“排序”函数或您称之为任何函数之后的样子:

$arr = array( 0 => array(), 1 => array(), 2 => array(     8 => array(        14 => array(            16 => array(),            17 => array(),            18 => array()),        15 => array()),     9 => array(),    10 => array(),    11 => array()), 3 => array(    12 => array(),    13 => array()));

我知道所有的空数组()可能不是一个非常干净和优雅的解决方案,但不幸的是,这就是我需要的方式!

最佳答案

此递归函数会将给定的数据添加到正确的父级,并且应该为起始数组中的每个元素调用一次。

function add_branch(&$tree, $datum, $parent) {

// First we have the base cases:
// If the parent is NULL then we don't need to look for the parent
if ($parent == NULL) {
$tree[$datum] = array();
return true;
}

// If the array we've been given is empty, we return false, no parent found in this branch
if (! count($tree)) {
return false;
}


// We loop through each element at this level of the tree...
foreach($tree as $key => $val) {

// If we find the parent datum...
if ($key == $parent) {

// We add the new array in and we're done.
$tree[$key][$datum] = array();
return true;
}

// Otherwise, check all the child arrays
else {

// Now we check to see if the parent can be found in the curent branch
// If a recursive call found a parent, we're done
if (add_branch($tree[$key], $datum, $parent)) {
return true;
}
}
}

// If none of the recursive calls found the parent, there's no match in this branch
return false;

}

评论比较啰嗦,希望大家看明白是怎么回事。我鼓励您阅读一些有关递归函数的文章,以了解它。

这是它的用法:

$arr = array(
0 => NULL,
1 => NULL,
2 => NULL,
3 => NULL,
8 => '2',
9 => '2',
10 => '2',
11 => '2',
12 => '3',
13 => '3',
14 => '8',
15 => '8',
16 => '14',
17 => '14',
18 => '14'
);


$final = array();

foreach ($arr as $datum => $parent) {
add_branch($final, $datum, $parent);
}

$final 现在有正确的结束数组,如问题中所示。

关于php - 创建多维数组的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4238787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com