PHP遍历平面数组以创建json字符串

时间:2017-11-01 04:23:06

标签: php cakephp cakephp-1.3

我使用旧版本的Cake(1.3)。

我有一个返回目录结构的数组,然后我使用Set :: Flatten()展平了数组,并输出以下示例;

Array
(
    [0] => Screen Shot 2017-10-09 at 7.08.52 pm-1.png
    [projects.raiders.0] => Webserver_requests_graph.jpg
    [images.0] => Screen Shot 2017-10-09 at 7.08.52 pm.png
    [triggers.0] => Screen_Shot_2017-10-09_at_4_52_32_pm.png
    [providers.0] => testScreen Shot 2017-10-09 at 7.08.52 pm.png
)

'键'代表文件结构,所以0是/,项目是目录,raider是项目的子目录,等等....

我需要创建一个JSON字符串,它遍历上面数组的每一层并将其放入以下格式;

[ ['fullpathname', 'displaytext', 'isfile'] ]

我还需要添加点来表示原始目录结构,因此上面的数组将变成以下JSON字符串;

[
    ['/', '/', 'false'],
    ['/Screen Shot 2017-10-09 at 7.08.52 pm-1.png', 'Screen Shot 2017-10-09 at 7.08.52 pm-1.png', 'true'],
    ['/projects', '.. projects', 'false'],
    ['/projects/raiders', '.. .. raiders', 'false'],
    ['/projects/raiders/Webserver_requests_graph.jpg', '.. .. .. Webserver_requests_graph.jpg', 'true'],
    ['/images', '.. images', 'false'],
    ['/images/Screen Shot 2017-10-09 at 7.08.52 pm.png', '.. .. Screen Shot 2017-10-09 at 7.08.52 pm.png', 'true'],
    ['/triggers', '.. triggers', 'false'],
    ['/triggers/Screen_Shot_2017-10-09_at_4_52_32_pm.png', '.. .. Screen_Shot_2017-10-09_at_4_52_32_pm.png', 'true'],
    ['/providers', '.. providers', 'false'],
    ['/providers/testScreen Shot 2017-10-09 at 7.08.52 pm.png', '.. .. testScreen Shot 2017-10-09 at 7.08.52 pm.png', true]
]

我想知道我是否能得到一些指导,我真的很想知道如何解决这个问题。我听说过array_walk_recursive,但我不明白。任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:1)

你需要像下面这样做: -

<?php

$final_array = [['/', '/', 'false']]; // i have taken first value from output by-default because i am unable to create any logic for first value through the given input

foreach($array as $key=>$val){
    if($key=='0'){
        $final_array[] = ['/'.$val,$val,'true'];
    }else{
        $exploded_key = explode('.',$key);
        foreach ($exploded_key as $k=>$v){
            if($v =='0'){
                $dots = '.. ';
                for ($i=0;$i<count(array_slice($exploded_key, 0, $k));$i++){
                    $dots .= '.. ';
                }
                $final_array[] = [ '/'. join('/', array_slice($exploded_key, 0, $k)).'/'.$val,$dots.$val,'true'];
            }else{
                $dots = '.. ';
                for ($i=0;$i<count(array_slice($exploded_key, 0, $k));$i++){
                    $dots .= '.. ';
                }
                $final_array[] = [ '/'. join('/', array_slice($exploded_key, 0, $k+1)),$dots.$v,'false'];
            }
        }
    }
}

echo "<pre/>";print_r($final_array);

输出: - https://eval.in/890536

注意: - 如果您想将json作为输出,请使用下面的json_encode(): -

echo json_encode($final_array);

输出: - https://eval.in/890584