需要帮助将PHP转换为C#

时间:2011-03-05 04:54:10

标签: c# php arrays recursion multidimensional-array

我有这个PHP代码:

$lines = file("data.csv");
$nested = array();
$links = array();

// first, create a structure that contains the connections between elements
foreach ($lines as $line) {
  list($child, $parent) = explode(",", $line);
  if (trim($child) == trim($parent)) {
    $nested[$parent] = null;
  } else {
    // add it to the children of parent
    $links[$parent][] = $child;
  }
}

function process(&$arr) {
  global $links;
  foreach ($arr as $key => $value) {
    // no more children => stop recursion
    if (!array_key_exists($key, $links)) {
      $array[$key] = null;
      continue;
    }
    // insert its children
    $arr[$key] = array_flip($links[$key]);
    // recurse down
    process($arr[$key]);
  }
}


function print_html($multi_dimensional_array)
{
    $m = $multi_dimensional_array;
    $keys = array();

    foreach($m as $key=>$value) {
            $keys[] = $key;
    }

    $i = 0;

    while($i < count($multi_dimensional_array)) {
        echo '<li><a href="#">'.$keys[$i].'</a>';
        if(is_array($multi_dimensional_array[$keys[$i]])) {
                echo '<ul>';
                print_html($multi_dimensional_array[$keys[$i]]);
                echo '</ul>';
        }
        echo '</li>';
        $i++;
    }
}

process($nested);

print_html($nested);

data.csv格式是(value,parent),例如:

one,one
two,two
three,three
sub_one,one
sub_one2,one
sub_two,two
sub_two2,two
sub_two3,two
sub_three,three
sub_sub_one,sub_one
sub_sub_one2,sub_one

基本上这个PHP代码所做的是创建一个多维数组,其中包含父名称作为键,子项作为值,如果子项还包含子子项,那么它将是包含子项等的键...然后它将打印该阵列的html格式列表。

我怎么能用C#来做这个PHP代码呢?

1 个答案:

答案 0 :(得分:0)

C#中的数组与PHP中的数组不同。您可能需要实现Composite pattern以获得所需的数据结构。这只是指向一小部分任务的正确(我认为)方向的指针。如果您最终使用该模式,请考虑Dictionary<string, TComposite>了解子集合的类型。