dongmao9217 2014-07-26 12:22 采纳率: 100%
浏览 39
已采纳

如何将数组从一种格式转换为另一种格式?

i have an array like this.

Array
(
    [0] => Array
        (
            [size] => 197602
            [files] => Array
                (
                    [0] => directory1
                    [1] => file1.jpg
                )

        )

    [1] => Array
        (
            [size] => 274893
            [files] => Array
                (
                    [0] => directory1
                    [1] => file2.jpg
                )

        )

    [2] => Array
        (
            [size] => 41
            [files] => Array
                (
                    [0] => directory2
                    [1] => file1.txt
                )

        )

    [3] => Array
        (
            [size] => 41
            [files] => Array
                (
                    [0] => directory2
                    [1] => file2.txt
                )

        )

    [4] => Array
        (
            [size] => 47
            [files] => Array
                (
                    [0] => directory2
                    [1] => sub-directory1
                    [2] => file1.txt
                )

        )

    [5] => Array
        (
            [size] => 41
            [files] => Array
                (
                    [0] => directory2
                    [1] => sub-directory1
                    [2] => file2.txt
                )

        )

    [6] => Array
        (
            [size] => 47
            [files] => Array
                (
                    [0] => directory2
                    [1] => sub-directory1
                    [2] => file3.txt
                )

        )

    [7] => Array
        (
            [size] => 41
            [files] => Array
                (
                    [0] => file1.txt
                )

        )

    [8] => Array
        (
            [size] => 47
            [files] => Array
                (
                    [0] => file2.txt
                )

        )

)

i used this code snippet.

<?php

foreach($array as $x)
{
    $path=implode('\\',$x['path']);
    $files[$path]=$x['length'];
}

and got simplified version of above array like this.

Array
(
    'directory1\file1.jpg' => 197602,
    'directory1\file2.jpg' => 274893,
    'directory2\file1.txt' => 41,
    'directory2\file2.txt' => 41,
    'directory2\sub-directory1\file1.txt' => 47,
    'directory2\sub-directory1\file2.txt' => 41,
    'directory2\sub-directory1\file3.txt' => 47,
    'file1.txt' => 41,
    'file2.txt' => 47
);

so my question is how can i get the original array from simplified array, i.e. 1st array from 2nd array. ?

so far i have tried this.

<?php

$array =    Array
    (
        'directory1\file1.jpg' => 197602,
        'directory1\file2.jpg' => 274893,
        'directory2\file1.txt' => 41,
        'directory2\file2.txt' => 41,
        'directory2\sub-directory1\file1.txt' => 47,
        'directory2\sub-directory1\file2.txt' => 41,
        'directory2\sub-directory1\file3.txt' => 47,
        'file1.txt' => 41,
        'file2.txt' => 47
    );

    print_r($array);


$new_array = array();

    foreach($array as $path => $size){

        if(strpos($path,'\\') !== false) {
        //file is under a directory tree/structure 

        $directory_tree = explode('\\',$path);

        $new_array[]['size'] = $size ;
        $new_array[]['files'] = $directory_tree;

        //last element in array is filename. 

       //print_r($directory_tree );

        }else{
        //its just file

        $new_array[]['size'] = $size;
        $new_array[]['path']= $path;

        }

   }


    print_r($new_array);

but getting double arrays for size and files like this.

Array
(
    [0] => Array
        (
            [size] => 197602
        )

    [1] => Array
        (
            [files] => Array
                (
                    [0] => directory1
                    [1] => file1.jpg
                )

        )

    [2] => Array
        (
            [size] => 274893
        )

    [3] => Array
        (
            [files] => Array
                (
                    [0] => directory1
                    [1] => file2.jpg
                )

        )

    [4] => Array
        (
            [size] => 41
        )

    [5] => Array
        (
            [files] => Array
                (
                    [0] => directory2
                    [1] => file1.txt
                )

        )

    [6] => Array
        (
            [size] => 41
        )

    [7] => Array
        (
            [files] => Array
                (
                    [0] => directory2
                    [1] => file2.txt
                )

        )

    [8] => Array
        (
            [size] => 47
        )

    [9] => Array
        (
            [files] => Array
                (
                    [0] => directory2
                    [1] => sub-directory1
                    [2] => file1.txt
                )

        )

    [10] => Array
        (
            [size] => 41
        )

    [11] => Array
        (
            [files] => Array
                (
                    [0] => directory2
                    [1] => sub-directory1
                    [2] => file2.txt
                )

        )

    [12] => Array
        (
            [size] => 47
        )

    [13] => Array
        (
            [files] => Array
                (
                    [0] => directory2
                    [1] => sub-directory1
                    [2] => file3.txt
                )

        )

    [14] => Array
        (
            [size] => 41
        )

    [15] => Array
        (
            [path] => file1.txt
        )

    [16] => Array
        (
            [size] => 47
        )

    [17] => Array
        (
            [path] => file2.txt
        )

)

How can i solve this issue ?

thanks

  • 写回答

2条回答 默认 最新

  • dongxin8709 2014-07-26 12:29
    关注

    You have to change this snippet:

        $new_array[]['size'] = $size ;
        $new_array[]['files'] = $directory_tree;
    

    to this:

        $new_array[] = array('size' => $size, 'files' => $directory_tree);
    

    And similarly for the "just file" case:

        $new_array[] = array('size' => $size, 'path' => $path);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 找人不需要人工智能回答的gamit解算后做形变分析
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥15 统计大规模图中的完全子图问题
  • ¥15 使用LM2596制作降压电路,一个能运行,一个不能
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路
  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错