将目录结构转换为关联数组

3
我有以下这样的字符串
abc\xyz
abc\def\ghi

我需要的是关联数组格式。
$array["abc"]["xyz"]
$array["abc"]["def"]["ghi"]

我正在使用 "\" 字符来拆分字符串。

现在,我有了每一行的数组。 从这里,我该如何动态地获得上面的关联格式?


2
为什么要进行转换? 只需在目录上使用递归迭代器即可获得您的数组。 - Alma Do
你提到想将目录转换为数组。因此,可以使用迭代器来实现。 - Alma Do
我的输入是来自日志文件的字符串。例如? - raj
3个回答

1

既然你已经澄清了你的数据是来自某个日志文件(即不直接来自文件系统,因此甚至可能是非真实目录),你可以使用这种简单的方法来获取你的数组:

$data = 'abc\xyz
abc\def\ghi
abc\xyz\pqr';
//
$data = preg_split('/[\r\n]+/', $data);
$result  = [];
$pointer = &$result;
foreach($data as $path)
{
   $path = explode('\\', $path);
   foreach($path as $key)
   {
      if(!isset($pointer[$key]))
      {
         $pointer[$key] = null;
         $pointer = &$pointer[$key];
      }    
   }
   $pointer = &$result;
}

-这将导致:

数组(3){
  ["abc"]=>
  array(1) {
    ["xyz"]=>
    NULL
  }
  ["def"]=>
  array(1) {
    ["ghi"]=>
    NULL
  }
  ["xyz"]=>
  array(1) {
    ["pqr"]=>
    NULL
  }
}

0

逐行读取日志文件:

$yourAssoc = array();
$handle = fopen("inputfile.txt", "r");
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        // process the line read.
        $arrayLine = explode('/', $line);
        if (!in_array($arrayLine[0], $yourAssoc)) {
            $yourAssoc[$arrayLine[0]] = 'stuff'; // you take it from here and do what you want
        }
    }
} else {
    // error opening the file.
}

0

尝试以下代码:

<?php
$varStr = 'abc\def\ghi';

$arr = explode("\\", $varStr);
$outArr = array();

foreach (array_reverse($arr) as $arr)
    $outArr = array($arr => $outArr);


print_r($outArr);

注意:我只使用了您数据中的一行。

问题是关于完整结构重建。 - Alma Do

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接