PHP 将多维数组转换为修改后的前序遍历树 [英] PHP converting multidimensional array to Modified Pre-order Traversal Tree
本文介绍了PHP 将多维数组转换为修改后的前序遍历树的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个多维数组,我想将其转换为修改后的预排序遍历树:
I have a multidimendional array that I want to transform to a Modified Pre-order Traversal Tree:
$data = array(
"MTGO" => array("Magic Online" => array("MTGO Masters Edition", "MTGO Masters Edition II", "MTGO Masters Edition III", "MTGO Masters Edition IV")),
"Expansions" => array("Ice Age Cycle" => array("Coldsnap Theme Decks", "Ice Age", "Alliances"), "Theros" => array("Theros")),
"unclassified" => array("Portal", "Eight Edition")
);
我尝试通过循环嵌套数组或使用迭代器,但我只是没有成功获得正确的界限.
I've tried by looping through the nested arrays, or using iterators, but I just didn't succeeded in getting the right bound.
这里我有什么左边界,我如何得到正确的??
Here what I have for getting left bound, how do I get the right one ??
foreach ($data as $groupname => $group) {
echo $i.':'.$groupname . '<br/>';
if (is_array($group)) {
foreach ($group as $blockname => $block) {
$i++;
if (is_array($block)) {
echo " " .$i.':'. $blockname . '<br/>';
foreach ($block as $setname) {
$i++;
echo " " .$i.':'. $setname . '<br/>';
}
} else {
echo " " .$i.':'. $block . '<br/>';
}
}
}
$i++;
}
推荐答案
最后我找到了一个解决方案,满足我的需求,所以它深入 3 级,但它可以通过一些调整轻松适应递归需求:>
Finally I've found a solution, for my needs so it goes 3 level deep, but it can be easily adapted to recursive needs with some tweaks:
class Mptt_object {
public $lb;
public $rb;
public $data;
public function __construct($name, $lb, $rb = null) {
$this->data = $name;
$this->lb = $lb;
$this->rb = $rb;
}
}
function getMptt(array $data)
{
/** @var Mptt_object[] $mptts */
$mptts = array();
$i = 0;
foreach ($data as $firstLevelElementKey => $firstLevelElement) {
$i++;
$firstLevelElementMptt = new Mptt_object($firstLevelElementKey, $i);
foreach ($firstLevelElement as $secondLevelElementKey => $secondLevelElement) {
if (is_array($secondLevelElement)) {
$i++;
$secondLevelElementMptt = new Mptt_object($secondLevelElementKey, $i);
$thirdLevelElementMptts = array();
foreach ($secondLevelElement as $thirdLevelElementKey => $thirdLevelElement) {
$i++;
$thirdLevelElementMptt = new Mptt_object($thirdLevelElement, $i);
$i++;
$thirdLevelElementMptt->rb = $i;
$mptts[] = $thirdLevelElementMptt;
}
$i++;
$secondLevelElementMptt->rb = $i;
$mptts[] = $secondLevelElementMptt;
$mptts = array_merge($mptts, $thirdLevelElementMptts);
} else {
$i++;
$secondLevelElementMptt = new Mptt_object($secondLevelElement, $i);
$i++;
$secondLevelElementMptt->rb = $i;
$mptts[] = $secondLevelElementMptt;
}
}
$i++;
$firstLevelElementMptt->rb = $i;
$mptts[] = $firstLevelElementMptt;
}
return $mptts;
}
这篇关于PHP 将多维数组转换为修改后的前序遍历树的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文