php - 如何将多个 url/path 合并到多维数组中?

标签 php url merge path multidimensional-array

我有这样的数组:

$path = array (
[0] => site\projects\terrace_and_balcony\mexico.jpg
[1] => site\projects\terrace_and_balcony\new_york.jpg
[2] => site\projects\terrace_and_balcony\berlin.jpg
[3] => site\projects\terrace_and_balcony\Kentucky.jpg
[4] => site\projects\terrace_and_balcony\Utah.jpg
[5] => site\projects\terrace_and_balcony\Hawaii.jpg
[6] => site\projects\private_gardens\mexico.jpg
[7] => site\projects\private_gardens\new_york.jpg
[8] => site\projects\private_gardens\berlin.jpg
[9] => site\projects\private_gardens\Kentucky.jpg
[10] => site\projects\private_gardens\Utah.jpg
[11] => site\projects\private_gardens\Hawaii.jpg
)

如何将其转换为:

$path11 = array
(
    "site"=>array
    (
        "projects"=>array
        (
            "terrace_and_balcony"=>array
            (
                "mexico.jpg",
                "new_york.jpg",
                "berlin.jpg",
                "Kentucky.jpg",
                "Utah.jpg",
                "Hawaii.jpg"
            ),
            "private_gardens"=>array
            (
                "mexico.jpg",
                "new_york.jpg",
                "berlin.jpg",
                "Kentucky.jpg",
                "Utah.jpg",
                "Hawaii.jpg"
            )
        )
    )
);

最佳答案

$pathStrings = [
    'site\\projects\\terrace_and_balcony\\mexico.jpg',
    'site\\projects\\terrace_and_balcony\\new_york.jpg',
    'site\\projects\\terrace_and_balcony\\berlin.jpg',
    'site\\projects\\terrace_and_balcony\\Kentucky.jpg',
    'site\\projects\\terrace_and_balcony\\Utah.jpg',
    'site\\projects\\terrace_and_balcony\\Hawaii.jpg',
    'site\\projects\\private_gardens\\mexico.jpg',
    'site\\projects\\private_gardens\\new_york.jpg',
    'site\\projects\\private_gardens\\berlin.jpg',
    'site\\projects\\private_gardens\\Kentucky.jpg',
    'site\\projects\\private_gardens\\Utah.jpg',
    'site\\projects\\private_gardens\\Hawaii.jpg'
];

$paths = [];
foreach ($pathStrings as $pathString) {
    // Split by the delimiter.
    $pathParts = explode('\\', $pathString);

    // Build a nested assoc array representing the path.
    // Each key and value comes from the delimited parts of the string.
    // eg: site\projects\terrace_and_balcony\mexico.jpg
    // becomes: [
    //      'site' => [
    //              'projects' => [
    //                      'terrace_and_balcony' => [
    //                              'mexico.jpg'
    //                      ]
    //              ]
    //      ]
    // ]
    $path = [array_pop($pathParts)];
    foreach (array_reverse($pathParts) as $pathPart) {
        $path = [$pathPart => $path];
    }

    // Add it to a temp list.
    $paths[] = $path;
}

// Now, merge all the paths together recursively at once.
$tree = call_user_func_array('array_merge_recursive', $paths);

// Done.
print_r($tree);

演示:http://sandbox.onlinephpfunctions.com/code/12c82c18625dda23682baac37b2a5a8310fb869d

关于php - 如何将多个 url/path 合并到多维数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2579305/

相关文章:

javascript - ckeditor 未加载通过 ajax 调用生成的元素?

java - FileChooser.ExtensionFilter 不过滤.url 文件

Python 请求 urlencode 不起作用?

python Pandas : Join on unique column values and concatenate

mysql - 如何合并 phpMyAdmin 中的两个表以免出现重复条目​​?

php - 使用 PHP 对表格内的特定 TD 进行背景着色

php - 使用 CS-Cart 通过 API 添加商品到购物车

php - 从 flash 到 php/mysql 的数组

python - 请求 URL 中缺少方案

r - 将长数据框连接到整齐的数据框