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

PHP walk through flat array to create json string

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

我有一个 returns 目录结构的数组,然后我使用 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
)

'key'表示文件结构,所以0是/,projects是目录,raider是projects的子目录等等....

我需要创建一个 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,但我不明白。任何帮助将不胜感激。

谢谢

你需要像下面那样做:-

<?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