【问题标题】:Convert directory structure into assoc array将目录结构转换为关联数组
【发布时间】:2014-02-28 05:08:14
【问题描述】:

我有如下字符串

abc\xyz
abc\def\ghi

我需要它的 assoc 数组格式

$array["abc"]["xyz"]
$array["abc"]["def"]["ghi"]

我用“\”字符来分解字符串。

现在每行都有一个数组。 从中我如何动态获取上述 assoc 格式?

【问题讨论】:

标签: php arrays string multidimensional-array


【解决方案1】:

既然你已经澄清你的数据是从一些日志文件中派生的(即不是直接从FS,所以它甚至可能是非真实目录),你可以使用这个简单的方法来获取你的数组:

$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"]=> 数组(1){ [“xyz”]=> 空值 } [“定义”]=> 数组(1){ [“吉”]=> 空值 } [“xyz”]=> 数组(1){ [“pqr”]=> 空值 } }

【讨论】:

    【解决方案2】:

    逐行读取日志文件:

    $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.
    }
    

    【讨论】:

      【解决方案3】:

      试试下面的代码:

      <?php
      $varStr = 'abc\def\ghi';
      
      $arr = explode("\\", $varStr);
      $outArr = array();
      
      foreach (array_reverse($arr) as $arr)
          $outArr = array($arr => $outArr);
      
      
      print_r($outArr);
      

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

      【讨论】:

      • 问题是关于全结构重构
      猜你喜欢
      • 1970-01-01
      • 2011-08-11
      • 2015-06-22
      • 2014-03-05
      • 2016-08-07
      • 1970-01-01
      • 2019-01-06
      • 2011-04-13
      • 2017-02-21
      相关资源
      最近更新 更多