İlk diziye iki dizileri eksik unsurları eklemek için nasıl

2 Cevap

Şu anda benim ilk dizi oluşturmak için bir xml dosyası okuma SimpleXML kullanıyorum. Bu dizi bir dizinde bulunan ve xml dosyasına yazılır görüntülerin bir listesini görüntüler.

Ben aynı albüme yeni fotoğraf yüklemek kadar bu geçmişte benim için çalıştı. Ben bir o ilk dizinin sonuna yüklendi var görüntülerin tam bir listesini almak için ne yaptığını bilmek istiyorum. Herhangi bir öneriniz?

XML Dosya:

<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>

Dizisini almak için SimpleXML:

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

Benim sonuçlar için alıyorum Ne:

<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>

Tüm görüntüler için dizini taranıyor:

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>';
}

Ben hem dizileri kullanarak sonuç almak istiyorum ne:

<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 dosyası eksik son 3 resim listesinin sonuna ekledi olacaktır.

2 Cevap

Belki de bu sizin için çalışacak?

<?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>';
}

?>

Bu $image $xml->image gelen ve $filename sizin dir aramasından aynı biçimlendirilir üstleniyor. Eğer gösterilen kadarıyla onlar. Değilse onlar karşılaştırılabilir bir devlet onları almak için hızlı bir regex aracılığıyla çalıştırmak için yeterince kolay olmalı.

array_diff() aradığınız ne gibi görünüyor herhangi bir kim.

Eğer dizinde dosya adlarının tam listesini alırsanız PHP in_array kullanımı ve yolları bir dizi bunun için arama yapabilir

$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>';
}