2012-07-06 9 views
5

pracuję nad incorperating się JPlayer HTML5 dźwięku playlistęphp dla każdego z separatorem przecinkami wyjątkiem ostatniego

Używam foreach do generowania skryptu element dla każdego elementu listy. Wszystko działa zgodnie z oczekiwaniami, z tym wyjątkiem, że umieściłem przecinek w pętli, ale potrzebuję sposobu na napisanie przecinka jako separatora z wyjątkiem ostatniego elementu.

Oto, co mam do tej pory, aby wygenerować playlistę jplayera.

<?php foreach($songs as $song): if(!empty($song)): ?>{ 

     title:"Each Song Title", 

     mp3:"Each song mp3 url" 

    },<?php endif; endforeach; ?> 

który daje mi

{ 

     title:"Partir", 

     mp3:"http://www.jplayer.org/audio/mp3/Miaow-09-Partir.mp3" 

    }, 

    { 

     title:"Thin Ice", 

     mp3:"http://www.jplayer.org/audio/mp3/Miaow-10-Thin-ice.mp3" 

    }, 
    { 

     title:"Ice man", 

     mp3:"http://www.jplayer.org/audio/mp3/Miaow-10-Thin-ice.mp3" 

    }, 

To jest mój pożądany rezultat

{ 

     title:"Partir", 

     mp3:"http://www.jplayer.org/audio/mp3/Miaow-09-Partir.mp3" 

    }, 

    { 

     title:"Thin Ice", 

     mp3:"http://www.jplayer.org/audio/mp3/Miaow-10-Thin-ice.mp3" 

    }, 
    { 

     title:"Ice man", 

     mp3:"http://www.jplayer.org/audio/mp3/Miaow-10-Thin-ice.mp3" 

    } 

Czy ktoś może wskazać mi w dobrym kierunku?

+1

dlaczego nie można po prostu 'json_encode' go? – Gordon

Odpowiedz

11

używam next() do niego:

$arr = array(1,2,3,4,5,6,7); 
$copy = $arr; 
foreach ($arr as $val) { 
    echo $val; 
    if (next($copy)) { 
     echo ','; // Add comma for all elements instead of last 
    } 
} 
+0

a) 'foreach' iteruje po kopii tablicy i b)' next() 'przesuwa kursor. OK, to działa, ale to nie działa, z powodu powodu, dla którego myślisz, że działa;) W rzeczywistości jesteś iteracją na dwóch (identycznych) tablicach naraz i zatrzymujesz się, gdy zdajesz sobie sprawę, że jesteś na końcu Druga. – KingCrunch

+0

oh ... Aktualizacja: To nie działa całkowicie http://codepad.org/qTmlyDwU – KingCrunch

+0

@KingCrunch, dzięki. Zobacz moje zmiany. – pltvs

2

Co można też zrobić, to zamiast echo ją bezpośrednio do przeglądarki, należy go przechowywać w ciąg pierwszy.

<?php 
$string = ""; 
foreach($songs as $song) { 
    if(!empty($song)) 
    { 
     $string .= ' 
    { 

     title:"Each Song Title", 

     mp3:"Each song mp3 url" 

    }, 

    '; 
    } 
} 
$string = substr($string, 0, -1); //Removes very last comma. 
echo $string; 
?> 

Pozwala to również na użycie go w innym miejscu kodu, w razie potrzeby.

4

Masz na myśli JSON?

echo json_encode($array); 

Ponadto można korzystać z funkcji tablicy zamiast

// Create single items first 
$array = array_map(
    function ($item) {return sprintf(
     '{title:"%s",mp3:"%s"}', 
     $item['title'], 
     $item['mp3'] 
);}, 
    $array 
); 
// Then concatenate 
echo implode(',' $array); 

Wystarczy zrobić to kompletne: a for -solution

for ($n = count($array), $i = 0; $i < $n; $i++) { 
    echo sprintf('{title:"%s",mp3:"%s"}', $array[$i]['title'], $array[$i]['mp3']) 
    . ($i < $n-1 ? ',' : ''); 
} 
Powiązane problemy