说实话,我不知道从哪里开始。这是给定的情况:
我有默认的xml列表,如下所示:
<list>
<cat>
<l1>parent</l1>
<l2>child</l2>
<l2>child</l2>
</cat>
<cat>
<l1>parent</l1>
<l2>child</l2>
<l2>child</l2>
</cat>
</list>
而且我在同一级别上将服务器上的所有这些子文件夹放在同一级别,因此没有深度。每个子项都包含数字 pf JPG 图像。
现在我需要做的是一个 PHP,它创建相同的结构化 xml,但在每个孩子的名字旁边都有当前包含 JPG 的附加编号,并将专有的累积数设置为它们的父名称。
有什么想法吗?
假设您需要一个位于某个根路径上的脚本来扫描所有包含文件夹和文件 (jpg(,那么这个 php 脚本可能会帮助您:
<?php
$currDirPos = "./";
function createCats($currDirPos, $level=1){
$result = [];
if(is_dir($currDirPos)){
foreach (scandir($currDirPos) as $subDir) {
// do not take ./ ../ or own script-name into consideration
if($subDir=="."||$subDir==".."||$subDir==basename(__FILE__))continue;
$entry = ["name"=>$subDir,"level"=>$level];
if(is_dir($currDirPos."/".$subDir)){
$entry["children"] = createCats($currDirPos."/".$subDir,$level+1);
}
$result[] = $entry;
}
}
return $result;
}
function createXMLOutOfCatArray($cats){
$xml = "<list>";
function reduceToItemEntities($parent){
$output = "";
if(isset($parent["children"])){
foreach ($parent["children"] as $listItem) {
$output .= "<l".$listItem["level"].">".$listItem["name"]."</l".$listItem["level"].">";
$output .= reduceToItemEntities($listItem);
}
}
return $output;
}
foreach ($cats as $cat) {
$xml .= "<cat>";
$xml .= "<l".$cat["level"].">".$cat["name"]."</l".$cat["level"].">";
$xml .= reduceToItemEntities($cat);
$xml .= "</cat>";
}
return $xml."</list>";
}
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' . createXMLOutOfCatArray(createCats($currDirPos));
?>
它基本上利用函数 scandir 来获取函数createCats
中的所有文件夹和文件名。 createCats
创建一个数组,该数组按层次结构顺序包含所有 cat 元素及其子元素。
然后使用该createXMLOutOfCatArray
将以前获取的文件夹/文件名转换为 xml 结构。
希望这对你有帮助。