【问题标题】:PHP array to treePHP数组到树
【发布时间】:2014-02-04 03:06:32
【问题描述】:

我有一个包含以下值的数组:

array (
   array(a, a, a),
   array(a, a, b),
   array(a, b, a),
   array(b, c, d)
)

我想将此数组转换为具有关联数组的树,如下所示:

array (
    a => array (
        a => array(a, b),
        b => array(a)
    ),
    b => array (
        c => array(d)
    )
)

我试图解决这个问题几个小时。有谁知道这个问题的解决方案?第一个数组的值来自mysql数据库,它们是有序的。

【问题讨论】:

  • 您已经回答了您的问题。您的“想要”结构正是您在 PHP 中构建所需要的。如果你了解了如何在 PHP 中构建/访问多维数组的基本概念,这将成为一个小问题。
  • 如果没有给出深度,这件事实际上很有趣:)

标签: php mysql arrays tree converter


【解决方案1】:

只有两个级别:

 $a = array (
       array(a, a, a),
       array(a, a, b),
       array(a, b, a),
       array(b, c, d)
    );

    $out = array();
    foreach ($a as $row) {
        $out[$row[0]][$row[1]][] = $row[2];
    }
    echo '<pre>';
    print_r($out);

//http://phpfiddle.org/main/code/tcb-fwz

编辑: 使用基于数组长度的最大深度:

$input = array(
array('a', 'a', 'a', 'z'),
array('a', 'a', 'c', 'z'),
array('a', 'a', 'a', 'y'),
);

$result = array();

foreach ($input as $row) {

    for ($i = count($row)-1; $i >=0; $i--) {
        if (!isset($work)) {
            $work = array($row[$i]); //last item
        }else{
            $work = array($row[$i]=>$work);
        }
    }

    $result = array_merge_recursive($result, $work);
    unset($work);
}
echo '<pre>';
print_r($result);

//http://phpfiddle.org/main/code/1ag-4cj

如果$input数组元素是不同长度的数组,就会出现问题。

【讨论】:

  • 这是一个很好的解决方案,但如果我能指定数组的深度会更好。我的意思是我需要将它用于更多的数组,比如我的问题中的数组,所以最好让它动态
【解决方案2】:
$result = array();
foreach ($initial_array as $row) {
    $result[$row[0]][$row[1]][] = $row[2];
}

代码可以轻松更改,因此它适用于生成树的任何深度。

【讨论】:

  • 这是一个很好的解决方案,但如果我能指定数组的深度会更好。我的意思是我需要将它用于更多数组,比如我的问题中的数组,所以最好让它动态化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多