如何将多个URL/路径合并为多维数组? [英] how to merge multiple url/path into multidimensional array?

查看:127
本文介绍了如何将多个URL/路径合并为多维数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这样的数组:

$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/12c82c18625dda23682baac37b2a5> >

I have array like this:

$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
)

How to convert it to that:

$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);

Demo: http://sandbox.onlinephpfunctions.com/code/12c82c18625dda23682baac37b2a5a8310fb869d

这篇关于如何将多个URL/路径合并为多维数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆