Php 如何从字符串递归地构建json
我正在尝试从字符串映射JSON 这是我的绳子Php 如何从字符串递归地构建json,php,arrays,json,subdirectory,Php,Arrays,Json,Subdirectory,我正在尝试从字符串映射JSON 这是我的绳子 files/a/b.txt 我想像这样映射一个JSON { "name" => "files", "path" => "files", "type" => "folder", "items" => [{ "name" => "a", "path" => "files/a", "type" => "folder",
files/a/b.txt
我想像这样映射一个JSON
{
"name" => "files",
"path" => "files",
"type" => "folder",
"items" => [{
"name" => "a",
"path" => "files/a",
"type" => "folder",
"items" => [{
"name" => "b.txt",
"path" => "files/a/b.txt",
"type" => "file",
}]
}]
}
这里我显示了一个子文件夹,但它可以是无限的子文件夹。
任何帮助都将不胜感激。谢谢
更新:
这就是我现在拥有的
$str = "files/a/b.txt";
$path = explode("/",$str);
$num = count($path);
$num = --$num;
$files = array();
if($num > 2) {
foreach ($path as $keys => $value) {
if($keys > 1 && $keys < $num) {
$files[] = array(
"name" => $value,
"type" => "folder",
"path" => $path[0]."/".$path[1]."/".$value,
"items" =>
);
}
}
}else{
$files[] = array(
"name" => $path[2],
"type" => "file",
"path" => $path[0]."/".$path[1]."/".$path[],
"size" => filesize($path[0]."/".$path[1]."/".$path[])
);
}
echo json_encode($files);
$str=“files/a/b.txt”;
$path=explode(“/”,$str);
$num=计数($path);
$num=--$num;
$files=array();
如果($num>2){
foreach($key的路径=>$value){
如果($keys>1&&$keys<$num){
$files[]=数组(
“名称”=>$value,
“键入”=>“文件夹”,
“路径”=>$path[0]。“/”$path[1]。“/”$value,
“项目”=>
);
}
}
}否则{
$files[]=数组(
“name”=>$path[2],
“键入”=>“文件”,
“路径”=>$path[0]。“/”$path[1]。“/”$path[],
“size”=>filesize($path[0]。“/”$path[1]。“/”$path[]))
);
}
echo json_编码($files);
但我不知道如何编写items部分。此代码仅适用于一个子文件夹,仍然无法将文件包含在items文件夹中
注:考虑路径不一定存在。 < P>我不知道如何在PHP中完成,但是在JavaScript中,将是这样的:
function myFunction(myString)
{
var object={};
var path="";
var array=myString.split("/");
var items=[];
if(array.length==1)
{
object={
"name":array[0],
"path":array[0],
"type":"file"
}
} else{
var path= array[0];
var object={
"name":array[0],
"path":path,
"type":"folder"
}
array.splice(0,1);
object.items=[recursiveCall(array,path)]
}
}
function recursiveCall(array,path){
if(array.length==1){
return {
"name":array[0],
"path":path+"/"+array[0],
"type":"file"
}
}else{
path=path+"/"+array[0];
var obj={
"name":array[0],
"path":path,
"type":"folder"
}
array.splice(0,1);//remove first element
obj.items=[recursiveCall(array,path)]
return obj;
}
}
欢迎来到SO。向我们展示到目前为止您拥有的代码,这里的人会帮助您,但他们不会为您编写代码。这就是全部代码吗?你能告诉我们整个功能吗?如果是这样,那么你必须使用一个循环来递归地遍历你的所有文件夹。@AnthonyGranger是的,这是全部代码。我可以递归地写映射文件夹。但我不需要它来列出所有文件夹。例如,我只需要它列出文件夹“b”,而不是显示“文件”文件夹中的所有子文件夹谢谢你的帮助,但出于某种原因我不能使用javascript。我只能使用PHPYes我知道你需要php,但我想你可以用php翻译我的代码。我测试了代码并在js:DI中工作,但我不能。我对javascript了解不够:(