2010-09-24 22 views

Respuesta

16

Alternativamente, puede utilizar la función rtrim como:

$result = ''; 
foreach($array as $i=>$k) { 
    $result .= $i.'-'.$k.','; 
} 
$result = rtrim($result,','); 
echo $result; 
+3

Sí, se olvidó de la guarnición. +1 –

+0

Me gusta este mejor, gracias. – Bastien

+0

demasiado malo php no admite 'unset ($ result [strlen ($ result) -1])'. Sería tan agradable ... – NikiC

7

Un método es mediante el uso de substr

$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah"); 

$output = ""; 
foreach($array as $i=>$k) 
{ 
    $output .= $i.'-'.$k.','; 
} 

$output = substr($output, 0, -1); 

echo $output; 

Otro método sería utilizar implode

$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah"); 

$output = array(); 
foreach($array as $i=>$k) 
{ 
    $output[] = $i.'-'.$k; 
} 

echo implode(',', $output); 
+0

gracias por su ayuda – Bastien

0

probar este código después condición foreach luego echo $ result1

$result1=substr($i, 0, -1); 
3

No me gusta esta idea de usar substr en absoluto, ya que es el estilo de mala programación. La idea es concatenar todos los elementos y separarlos por frases especiales de "separación". La idea de llamar a la subcadena para eso es como usar un láser para disparar a las aves.

En el proyecto que estoy tratando actualmente, tratamos de deshacernos de los malos hábitos en la codificación. Y esta muestra se considera una de ellas. Obligamos a los programadores a escribir este código como este:

$first = true; 
$result = ""; 
foreach ($array as $i => $k) { 
    if (!$first) $result .= ","; 
    $first = false; 
    $result .= $i.'-'.$k; 
} 
echo $result; 

El propósito de este código es mucho más claro, que el que utiliza substr. O simplemente puede usar implosionar la función (nuestro proyecto está en Java, así que tuvimos que diseñar nuestra propia función para concatenar cadenas de esa manera). Debe usar la función substr solo cuando tenga una necesidad real para eso. Aquí esto debe evitarse, ya que es un signo de mal estilo de programación.

+0

¿Cómo es un signo de mal estilo de programación? ¿Te importaría explicar eso para todos nosotros? Por lo que puedo ver, no obstaculiza el rendimiento. Puedo entender la parte de claridad, pero al mismo tiempo no es difícil leer lo que substr para resolverlo. ¡Gracias! –

+0

En mi humilde opinión, todas las herramientas se deben utilizar de forma adecuada en los programas, y NO es suficiente para servir para la concatenación de cadenas, sino que se diseñó para otros problemas. Además, este código con substr se ve claro solo cuando está en un solo lugar. Si hay muchos fragmentos como este, el código se convierte en ilegible. Por lo tanto, en nuestro proyecto cambiamos a concatenación normal, y también hicimos una función especial para eso. Ahora la parte del proyecto que trata con cadenas es mucho más legible. –

+0

Muchas gracias por esta excelente y profesional solución. (y) –

1

siempre uso este método:

$result = ''; 
foreach($array as $i=>$k) { 
    if(strlen($result) > 0) { 
     $result .= "," 
    } 
    $result .= $i.'-'.$k; 
} 
echo $result; 
+0

Mala idea usar strlen para esto. Vea el artículo "Back to basics" de Joel Spolsky para ver por qué. Simplemente use una bandera booleana para realizar dicha verificación, porque en el peor de los casos (la matriz tiene N elementos - caracteres individuales) terminará con una complejidad O (N^2). –

+0

En general, no use funciones de cadena para lograr algún efecto, que se puede lograr fácilmente mediante simples trucos de programación (lo mismo es cierto para usar substr para deshacerse de la última coma; es mejor no generar la última comandante en absoluto). –

10

No me gusta todas las recetas anteriores.

Php no es C y tiene formas de mayor nivel para manejar este problema en particular.

Voy a comenzar desde el punto en el que tiene una matriz de esta manera:

$array = array('john-doe', 'foe-bar', 'oh-yeah'); 

Se puede construir una matriz de modo de la inicial mediante un bucle o array_map() función. Tenga en cuenta que estoy usando cadenas de comillas simples. Esta es una micro-optimización si no tiene nombres de variables que necesiten ser sustituidos.

Ahora tiene que generar una cadena CSV desde esta matriz, se puede hacer así:

echo implode(',', $array); 
+0

La ventaja de este enfoque es que podemos cambiar el delimitador más fácilmente. Además, puede hacer explotar la cadena para formar una matriz más tarde similar a esto. No está seguro acerca del inconveniente de rendimiento – thethanghn

+0

+1 para el enfoque más limpio. – NikiC

+0

Me gusta este también mejor. No bucle si no tiene que hacerlo. – Powertieke

0

esto haría:

rtrim ($string, ',') 
1

Suponiendo que la matriz es un índice, esto es trabajando para mi Bucle $ i y pruebo $ i con la tecla $.Cuando la tecla termina, las comas no se imprimen. Observe que el FI tiene dos valores para asegurarse de que el primer valor no tenga una coma al principio.

foreach($array as $key => $value) 
{ 
    $w = $key; 
    //echo "<br>w: ".$w."<br>";// test text 
    //echo "x: ".$x."<br>";// test text 
    if($w == $x && $w != 0) 
    { 
    echo ", "; 
    } 
    echo $value; 
    $x++; 
} 
0

ver este ejemplo se puede entender fácilmente

$name = ["sumon","karim","akash"]; 
foreach($name as $key =>$value){ 
echo $value; 
if($key<count($name){ 
    echo ","; 
} 
} 
Cuestiones relacionadas