【问题标题】:SimpleXML Dynamic AttributesSimpleXML 动态属性
【发布时间】:2017-06-07 21:33:04
【问题描述】:

我正在尝试弄清楚如何为此生成代码。

$revImages = $revXML->addChild('images');
$revImage = $revImages->addChild('image');
$revImage->addAttribute('src', '001.jpg');

最后一行是我需要的静态条目。是否有 foreach 语句可以用来根据目录中的图像自动生成最后一行,以便输出如下:

<images>
    <image src = "001.jpg"/>
    <image src = "002.jpg"/>
    <image src = "003.jpg"/>
    <image src = "004.jpg"/>
    <image src = "005.jpg"/>
    <image src = "006.jpg"/>
    <image src = "007.jpg"/>
    <image src = "008.jpg"/>
    <image src = "009.jpg"/>
    <image src = "010.jpg"/>
</images>

【问题讨论】:

  • 使用简单的foreach001.jpg 来自哪里?
  • 来自目录中的图像名称。相反,我需要查看目录并获取图像名称并将它们输出。

标签: php xml loops foreach simplexml


【解决方案1】:

使用glob函数的解决方案(查找匹配模式的路径名):

foreach (glob("/path/to/directory/*.jpg") as $filepath) {
    $src = basename($filepath);
    $revImages
       ->addChild('image')
       ->addAttribute('src', $src)
    ;
}

【讨论】:

  • 如果可以的话,我做到了 100% 只是再问一个问题?我怎样才能只显示文件名而不显示整个 url 路径?
  • 而不是 ->
  • 我试过 $revImage->addAttribute('src', basename($filepath));没有真正的工作
  • 为任何需要它的人得到它我的错误
  • foreach (glob($path . "*.jpg") as $filepath) { $filepath = basename($filepath); $revImage = $revImages->addChild('image'); $revImage->addAttribute('src', basename($filepath)); }
【解决方案2】:

就是这样:

$revImages = $revXML->addChild('images');
foreach ($some_data as $value) {
    // yes, everytime you need to create new `$revImage`
    $revImage = $revImages->addChild('image');
    $revImage->addAttribute('src', $value);
}

$some_data 是您拥有的值的数组。

更新:

if ($handle = opendir($path)) { 
    // create parent node before while-loop
    $revImages = $revXML->addChild('images'); 
    while (false !== ($entry = readdir($handle))) { 
        if ($entry != "." && $entry != "..") { 
            // yes, everytime you need to create new $revImage 
            $revImage = $revImages->addChild('image'); 

            // `$entry` is already a filename, there's no need to iterate over it
            $revImage->addAttribute('src', $entry); 
        } 
    } 
    closedir($handle); 
}

【讨论】:

  • 所以我必须将 $some_data 设置为这样的搜索函数 [code]$some_data = if (is_dir($path)){ if ($dh = opendir($path)){ while (($file = readdir($dh)) !== false){ echo $file . "
    ";关闭($dh); } };[/code]
  • 是的,设置$some_data并对其进行迭代
  • 生病了试一试,再次报告感谢您的帮助和快速响应
  • 扫描文件夹时为什么不直接在while循环中添加代码呢?无需创建一个额外的数组,然后您只需使用另一个循环进行迭代。
  • 我尝试这个没有运气 if ($handle = opendir($path)) { while (false !== ($entry = readdir($handle))) { if ($entry != "." && $entry != "..") { $revImages = $revXML->addChild('images'); foreach ($entry as $value) { // 是的,每次你需要创建新的$revImage $revImage = $revImages->addChild('image'); $revImage->addAttribute('src', $value); } } } closeir($handle); }
猜你喜欢
  • 2013-12-23
  • 1970-01-01
  • 2013-08-14
  • 2012-07-11
  • 2012-05-19
  • 2012-09-08
  • 1970-01-01
相关资源
最近更新 更多