如何将缺少的元素从两个数组添加到第一个数组

时间:2010-01-17 21:55:10

标签: php

我目前正在使用SimpleXML读取xml文件以生成我的第一个数组。此数组显示在目录中找到并写入xml文件的图像列表。

这对我来说很有用,直到我将新照片上传到同一张专辑。我想知道如何获得上传到第一个数组末尾的完整图像列表。有什么建议吗?

XML文件:

<album>
<image path="/albums/1/images/100_4124.jpg" />
<image path="/albums/1/images/100_4307.jpg" />
<image path="/albums/1/images/100_4335.jpg" />
</album>

SimpleXML获取数组:

$xml = simplexml_load_file('/albums/1/photos.xml');
foreach ($xml->image as $image)  {
    echo '<li><img src="'.$image.'"></li>';
}

我的结果是什么:

<li><img src="/albums/1/images/100_4124.jpg"></li>
<li><img src="/albums/1/images/100_4307.jpg"></li>
<li><img src="/albums/1/images/100_4335.jpg"></li>

扫描所有图像的目录:

if ($handle = @opendir('/albums/1/')) {
    $filenames = array();
    while (false !== ($file = readdir($handle))) {
        $ext = substr($file, strrpos($file, '.') + 1);
        if ($file != '.' && $file != '..') {
            $filenames[] = $file;
            $total++;
        }
    }
}
closedir($handle);

foreach ($filenames as $filename) {
    echo '<li><img src="'.$filename.'"></li>';
}

我希望使用两个数组获得结果:

<li><img src="/albums/1/images/100_4124.jpg"></li>
<li><img src="/albums/1/images/100_4307.jpg"></li>
<li><img src="/albums/1/images/100_4335.jpg"></li>    

<li><img src="/albums/1/images/100_9000.jpg"></li>
<li><img src="/albums/1/images/100_9001.jpg"></li>
<li><img src="/albums/1/images/100_9002.jpg"></li>

xml文件中缺少的最后3个图像将被添加到列表的末尾。

2 个答案:

答案 0 :(得分:1)

如果您在目录中获得了完整的文件名列表,则可以使用PHP in_array并在路径数组中搜索它

$paths = array();
foreach ($xml->image as $image) {
    $paths[] = $image['path'];
}
foreach ($filenames as $filename) {
    if (!in_array($filename, $paths) {
        $newImage = $xml->addChild('image');
        $newImage->addAttribute('path', $filename);
    }
}

//  save adjusted xml file, assuming you have permission
$xml->asXML('/albums/1/photos.xml');
foreach ($xml->image as $image)  {
    echo '<li><img src="'.$image.'"></li>';
}

答案 1 :(得分:1)

也许这对你有用吗?

<?php

$images = array();

foreach ($xml->image as $image) {
    $images[] = $image;
}

foreach (array_diff($filenames, $images) as $image) {
    $images[] = $image;
}

foreach ($images as $image) {
    echo '<li><img src="' . $image . '" /></li>';
}

?>

这假设您的目录搜索中$image$xml->image的{​​{1}}格式相同。从你所展现出来的。如果它们不够容易,可以通过快速正则表达式使它们处于可比较的状态。

任何看起来像$filename的人都是您正在寻找的。

相关问题