2010-01-17 32 views
1

我目前使用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>'; 
} 

我想獲得使用兩個陣列結果:

是從XML文件中缺少
<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> 

最後3個圖像將其添加到列表的末尾。

+0

爲什麼不只是調整XML文件? – 2010-01-17 21:57:23

+0

你知道匿名,那就是真正問題的解決方案。 – Anurag 2010-01-17 21:59:56

回答

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$filename從您的目錄搜索的格式相同。從你所展示的他們是。如果他們不應該很容易通過快速正則表達式運行它們,以使它們處於可比較的狀態。

任何看起來像array_diff()的人都是你要找的。

+0

美麗,這就像一個魅力工作,它很容易與我已經有了實施..謝謝 – Tim 2010-01-17 23:17:08

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>'; 
} 
相關問題