Avatar billede oldnick Nybegynder
08. december 2009 - 12:58 Der er 3 kommentarer og
1 løsning

Preg_match_all og foreach

Hej Eksperter

Jeg sidder med et irriterende problem og jeg er sikker på at jeg er ret tæt på men jeg kan bare ikke komme det sidste stykke.

Problem:
Har en output af billeder (img) som skal lave til en liste (li)! Outputtet for jeg via en shortcode (wordpress) hvor hele billedet tagget er som content i shortcoden.

Shortcode:
[photos]
<img src="sti/nummer1" alt="1" />
<img src="sti/nummer2" alt="2" />
<img src="sti/nummer3" alt="3" />
[/photos]

Jeg har lavet en funktion som skal tage shortcoden og lave om til dette output:

<ul>
<li><img src="sti/nummer1" alt="1" /></li>
<li><img src="sti/nummer2" alt="2" /></li>
<li><img src="sti/nummer3" alt="3" /></li>
</ul>

Og det er her mit problem ligger.

Funktionen:

function photoSlider($atts, $content = null) {
 
  // Removes unwanted <br /> tags
  $images = str_replace("<br />", "", $content);
 
  // Splits the images into a array
  $images = preg_match_all('/<img[^>]+>/',$images, $res);
 
  $gallery = '<ul>';
   
  foreach($res as $photo) :
           
    $gallery .= '<li>'. $photo .'</li>';
           
  endforeach;
       
$gallery .= '</ul>';
   
return $gallery;
}

add_shortcode("photos", "photoSlider");

Dette resulter i:

<ul><li>Array</li></ul>

Og det forstår jeg sådan set godt, jeg ved bare ikke hvad jeg skal gøre for at fikse det. Det er noget med at det faktisk er en array i en array eller noget i den retning.

Jeg håber der er nogen som har en nem og hurtigt løsning. (og til dem som synes det er mærkelig at jeg ikke bare finder svaret ved at søge her eller på google, så ville det være rart med et link til en artikel som kan hjælpe! For jeg har været vidt omkring ;)

Mvh, Mads
Avatar billede erikjacobsen Ekspert
08. december 2009 - 13:25 #1
Formentlig bare:

  $gallery .= '<li>'. $photo[0] .'</li>';
Avatar billede oldnick Nybegynder
08. december 2009 - 14:15 #2
Det har jeg faktisk prøvet, men det giver kun en li med et img inde i.

Jeg har lavet en print_r($res); - lige efter preg_match_all - og det giver dette:

Array
(
    [0] => Array
        (
            [0] => <img src="sti/nummer1" alt="1" />
            [1] => <img src="sti/nummer2" alt="2" />
            [2] => <img src="sti/nummer3" alt="3" />
        )

)

Jeg ser det som om at der er brug for en foreach i en foreach, men jeg ved ikke lige hvorfor der bliver lavet en ekstra array af det. Jeg tror det er preg_macth_all som gøre det, er dette korrekt?
Avatar billede erikjacobsen Ekspert
08. december 2009 - 14:24 #3
Nå, ja. Prøv

  foreach($res[0] as $photo) :
         
    $gallery .= '<li>'. $photo .'</li>';
         
  endforeach;
Avatar billede oldnick Nybegynder
08. december 2009 - 17:08 #4
Sådan, det var det der skulle til, tusind tak.

For en god ordens skyld så ser den endelige funktion sådan ud:

function photoSlider($atts, $content = null) {
 
    // Removes unwanted <br /> tags
    $images = str_replace("<br />", "", $content);
 
    // Splits the images into a array
    $images = preg_match_all('/<img[^>]+>/',$images, $res);

    $gallery = '<ul>';
   
    foreach($res[0] as $photo) :
           
        $gallery .= '<li>'. $photo .'</li>';
           
    endforeach;
       
    $gallery .= '</ul>';
   
return $gallery;
}

add_shortcode("photos", "photoSlider");

Tak igen erik

Mvh, Mads
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester