我使用旧版本的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,但我不明白。任何帮助将不胜感激。
谢谢
答案 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