PHP字符串数组到树结构

时间:2014-07-22 11:30:19

标签: php

我有像以下格式的字符串数组

Array(
"Courses",
"Courses/PHP",
"Courses/PHP/Array",
"Courses/PHP/Functions",
"Courses/JAVA",
"Courses/JAVA/String");

我需要结果如下

Courses
  - PHP
     - Array  
     - Functions 
  - JAVA
     - Strings

我使用substr选项来获得结果。

for($i=0;$i<count($outArray);$i++)
{
    $strp = strrpos($outArray[$i], '/')+1;  
    $result[] = substr($outArray[$i], $strp);
}

但是我没有像树结构那样获得结果。 如何获得树结构等结果。

2 个答案:

答案 0 :(得分:1)

那样的东西?

$a = array(
"Courses",
"Courses/PHP",
"Courses/PHP/Array",
"Courses/PHP/Functions",
"Courses/JAVA",
"Courses/JAVA/String");

$result = array();

foreach($a as $item){
    $itemparts = explode("/", $item);

    $last = &$result;

    for($i=0; $i < count($itemparts); $i++){
        $part = $itemparts[$i];
        if($i+1 < count($itemparts))
            $last = &$last[$part];
        else 
            $last[$part] = array();

    }
}

var_dump($result);

结果是:

array(1) {
  ["Courses"]=>
  array(2) {
    ["PHP"]=>
    array(2) {
      ["Array"]=>
      array(0) {
      }
      ["Functions"]=>
      array(0) {
      }
    }
    ["JAVA"]=>
    &array(1) {
      ["String"]=>
      array(0) {
      }
    }
  }
}

答案 1 :(得分:0)

这个怎么样:

<?php

$outArray = Array(
"Courses",
"Courses/PHP",
"Courses/PHP/Array",
"Courses/PHP/Functions",
"Courses/JAVA",
"Courses/JAVA/String");

echo "-" . $outArray[0] . "<br/>";
for($i=0;$i<count($outArray) - 1;$i++)
{
    create_tree($outArray[$i],$outArray[$i+1]);
}

function create_tree($prev, $arr)
{
    $path1 = explode("/", $prev);
    $path2 = explode("/", $arr);

    if (count($path1) > count($path2))
        echo str_repeat("&nbsp;&nbsp;",count($path1) - 1) . "-" . end($path2);
    else
        echo str_repeat("&nbsp;&nbsp;",count($path2) - 1) . "-" . end($path2);
    echo $outArray[$i] . "<br/>";
}

输出:

-Courses
  -PHP
    -Array
    -Functions
  -JAVA
    -Strings