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);
注意:- 如果您想要 json 作为输出,请使用 json_encode(),如下所示:-
echo json_encode($final_array);
我使用的是旧版本的 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);
注意:- 如果您想要 json 作为输出,请使用 json_encode(),如下所示:-
echo json_encode($final_array);