2012-07-06 10 views
5

estoy trabajando en incorperating la lista de reproducción de audio JPlayer html5php para cada uno con separador de coma excepto el último

estoy usando un foreach para generar el elemento de secuencia de comandos para cada elemento de la lista. Todo está funcionando como se esperaba, excepto que he incluido la coma en el ciclo, pero necesito una forma de escribir la coma como separador, excepto para el último elemento.

esto es lo que tengo hasta ahora para generar la lista de reproducción de jplayer.

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

     title:"Each Song Title", 

     mp3:"Each song mp3 url" 

    },<?php endif; endforeach; ?> 

que me da

{ 

     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" 

    }, 

Este es mi resultado deseado

{ 

     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" 

    } 

Puede alguien me punto en la dirección correcta?

+1

¿Por qué no simplemente 'json_encode' ella? – Gordon

Respuesta

11

utilizo next() para ello:

$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 sobre una copia de la matriz y b)' next() 'mueve el cursor. OK, funciona, pero no funciona, por la razón por la que crees que funciona;) De hecho, estás iterando sobre dos matrices (idénticas) a la vez y te paras, cuando te das cuenta, que estás al final de el segundo. – KingCrunch

+0

oh ... Actualización: No funciona por completo http://codepad.org/qTmlyDwU – KingCrunch

+0

@KingCrunch, gracias. Ver mis ediciones – pltvs

2

Lo que también se puede hacer, es más que el eco directamente al navegador, almacenarlo en una cadena en primer lugar.

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

Esto también permite su uso en cualquier parte de su código, si es necesario.

4

¿Quiere decir JSON?

echo json_encode($array); 

también puede utilizar funciones de matriz en lugar

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

sólo para que sea completa: for Una solución al

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