2012-07-06 11 views
5

sto lavorando incorperating il JPlayer HTML5 audio playlistphp per ciascuno con virgola come separatore tranne l'ultima

sto usando un foreach per generare l'elemento di script per ogni voce di playlist. Tutto funziona come previsto, tranne che ho incluso la virgola nel ciclo, ma ho bisogno di un modo per scrivere la virgola come separatore eccetto per l'ultimo elemento.

qui è quello che ho finora per generare JPlayer playlist.

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

     title:"Each Song Title", 

     mp3:"Each song mp3 url" 

    },<?php endif; endforeach; ?> 

che mi dà

{ 

     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" 

    }, 

Questo è il mio risultato desiderato

{ 

     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" 

    } 

Qualcuno mi può puntare nella giusta direzione?

+1

Perché non basta 'json_encode' esso? – Gordon

risposta

11

io uso next() per esso:

$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' itera su una copia dell'array eb)' next() 'sposta il cursore. OK, funziona, ma non funziona, a causa del motivo per cui pensi che funzioni;) In effetti stai iterando su due (identici) array contemporaneamente e ti fermi, quando realizzi, che sei alla fine di il secondo. – KingCrunch

+0

oh ... Aggiornamento: non funziona completamente http://codepad.org/qTmlyDwU – KingCrunch

+0

@KingCrunch, grazie. Vedi le mie modifiche. – pltvs

2

Cosa si può anche fare, è invece di eco direttamente al browser, conservarlo in una stringa prima.

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

Questo consente anche di essere utilizzato altrove nel codice, se necessario.

4

Vuoi dire JSON?

echo json_encode($array); 

Inoltre è possibile utilizzare funzioni di matrice invece

// 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); 

solo per renderlo completo: Un 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 ? ',' : ''); 
} 
Problemi correlati