php - 来自字符串的多维数组

标签 php arrays multidimensional-array

假设我有一个要放入多维数组的字符串。

编辑:字符串中子文件夹的数量是动态的.. 从零个子文件夹到 10 个

<?php
       $string ="Folder1/Folder2/Folder3/filename1\n";
       $string .=" Folder1/Folder2/Folder3/filename2\n";
       $string .=" Folder4/Folder2/Folder3/filename3\n";
?>

我想要返回以下数组

<?php
 Array
(
    [Folder1] => Array
        (
            [Folder2] => Array
                (
                    [Folder3] => Array
                        (
                            [0] => filename1
                            [1] => filename2
                        )

                )

        )

    [Folder4] => Array
        (
            [Folder2] => Array
                (
                    [Folder3] => Array
                        (
                            [0] => filename3
                        )

                )

        )

)
?>

完成此任务的最有效方法是什么?

为了好玩,假设这个数组将被发送到世界的另一端,它想返回一个字符串。我们将如何做到这一点?

最佳答案

您可以从此类(链接不再可用) 借用一些代码,特别是_processContentEntry 方法。

这是执行该工作的方法的修改版本:

function stringToArray($path)
{
    $separator = '/';
    $pos = strpos($path, $separator);

    if ($pos === false) {
        return array($path);
    }

    $key = substr($path, 0, $pos);
    $path = substr($path, $pos + 1);

    $result = array(
        $key => stringToArray($path),
    );

    return $result;
}

输出

var_dump(stringToArray('a/b/c/d'));

将是

array(1) {
  ["a"]=>
  array(1) {
    ["b"]=>
    array(1) {
      ["c"]=>
      array(1) {
        [0]=>
        string(1) "d"
      }
    }
  }
}

我想这就是你需要的:)


更新

根据您的评论,以下是处理由换行符分隔的字符串的方法:

$string = "Folder1/Folder2/Folder3/filename1\n";
$string .= " Folder1/Folder2/Folder3/filename2\n";
$string .= " Folder4/Folder2/Folder3/filename3\n";

// split string into lines
$lines = explode(PHP_EOL, $string);

// trim all entries
$lines = array_map('trim', $lines);

// remove all empty entries
$lines = array_filter($lines);

$output = array();

// process each path
foreach ($lines as $line) {
    // split each line by /
    $struct = stringToArray($line);

    // merge new path into the output array
    $output = array_merge_recursive($output, $struct);
}

print_r($output);

附言 要将此数组转换为字符串,只需调用 json_encode ,但是我认为没有理由将其转换为数组,然后再恢复为原来的样子。

关于php - 来自字符串的多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10123604/

相关文章:

multidimensional-array - Rust 多维数组行主要且紧凑吗?

php - mysql无法正常工作

php - 使用 fetch_assoc 从数据集中获取特定行?

php - 在 PHP 中,编译时和运行时是什么意思?

javascript - JSON 数据到 Javascript 数组未定义

javascript - 访问 javascript/jquery 中存储在数组中的对象的属性

python - 如何定义一个二维数组?

php - 如何在 OS X 上使用 PHP7 在 MAMP 上安装 mongodb php 驱动程序?

ruby - 如何按特定顺序对 Ruby 中的数组进行排序?

java - 使用递归对二维数组中的整数求和?