2010-03-12 18 views

Respuesta

186

Desea utilizar implode para esto.

es decir: $commaList = implode(', ', $fruit);


Hay una manera de añadir comas sin tener un arrastra uno. Te gustaría hacer esto si tienes que hacer otra manipulación al mismo tiempo. Por ejemplo, tal vez desea citar cada fruta y luego separarlos todo por comas:

$prefix = $fruitList = ''; 
foreach ($fruits as $fruit) 
{ 
    $fruitList .= $prefix . '"' . $fruit . '"'; 
    $prefix = ', '; 
} 

Además, si sólo haces de la manera "normal" de añadir una coma después de cada elemento (como suena eras haciendo antes), y necesita recortar el último, simplemente haga $list = rtrim($list, ', '). Veo a mucha gente innecesariamente rebuscando con substr en esta situación.

+3

tendría más sen se (si intenta agregar comillas) para llamar al $fruitlist = '"' . implode('", "', $fruit) . '"'; cwallenpoole

+0

El bucle foreach es mejor si desea manipular esos datos en la matriz antes de convertirla en una cadena; Por ejemplo, addslashes, o mysql_real_escape_string. –

3

Prefiero usar una instrucción IF en el ciclo FOR que comprueba para asegurarse de que la iteración actual no sea el último valor en la matriz. Si no es así, agregue una coma

$fruit = array("apple", "banana", "pear", "grape"); 

for($i = 0; $i < count($fruit); $i++){ 
    echo "$fruit[$i]"; 
    if($i < (count($fruit) -1)){ 
     echo ", "; 
    } 
} 
+2

si el recuento total es solo diferente de 4? – Jyothish

+0

escriba 1000000 en lugar de 3. ¿Entonces se solucionó el problema? –

30

Ésta es la forma en que he estado haciendo:

$arr = array(1,2,3,4,5,6,7,8,9); 

$string = rtrim(implode(',', $arr), ','); 

echo $string; 

Salida:

1,2,3,4,5,6,7,8,9 

demostración en vivo: http://ideone.com/EWK1XR

EDIT: Por comentario de @ joseantgv, debería poder eliminar rtrim() del ejemplo anterior. Es decir:

$string = implode(',', $arr); 
+5

Como se explicó anteriormente, puede hacer implode (',', $ arr) – joseantgv

+0

@joseantgv Tiene razón, no sé por qué uso 'rtrim()'. Recuerdo que tuve un problema con el hecho de que había comas adicionales al final del hilo, pero no puedo recordar la situación en la que estaba sucediendo. – Nate

-1

Si haciendo respuestas citadas, se puede hacer

$commaList = '"'.implode('" , " ', $fruit). '"'; 

la anterior supone que la fruta no es nulo. Si no quiere hacer esa suposición, puede usar una instrucción if-then-else o un operador ternary (? :).

-2

Otra forma podría ser así:

$letters = array("a", "b", "c", "d", "e", "f", "g"); 

$result = substr(implode(", ", $letters), 0, -3); 

salida de $result es una lista separada por comas formato agradable.

a, b, c, d, e, f, g 
2

Similar a la respuesta de Lloyd, pero funciona con cualquier matriz de tamaños.

$missing = array(); 
$missing[] = 'name'; 
$missing[] = 'zipcode'; 
$missing[] = 'phone'; 

if(is_array($missing) && count($missing) > 0) 
     { 
      $result = ''; 
      $total = count($missing) - 1; 
      for($i = 0; $i <= $total; $i++) 
      { 
       if($i == $total && $total > 0) 
        $result .= "and "; 

       $result .= $missing[$i]; 

       if($i < $total) 
       $result .= ", "; 
      } 

      echo 'You need to provide your '.$result.'.'; 
      // Echos "You need to provide your name, zipcode, and phone." 
     } 
1

A veces ni siquiera necesita php para esto en ciertos casos (elementos de la lista son cada una en su propia etiqueta genérica de rinde por ejemplo) Siempre se puede añadir comas para todos los elementos excepto el último niño a través de CSS si son elementos separados después de ser renderizados desde el script.

Yo uso esta mucho en la columna vertebral apps de realidad para recortar algunos arbitraria grasa código:

.likers a:not(:last-child):after { content: ","; } 

ve Básicamente en el elemento, todos los objetivos excepto que es último elemento, y después de cada elemento se agrega una coma. Solo una manera alternativa de no tener que usar script en absoluto si el caso aplica.

-2
$letters = array("a", "b", "c", "d", "e", "f", "g"); // this array can n no. of values 
$result = substr(implode(", ", $letters), 0); 
echo $result 

output-> a, b, c, d, e, f, g

3

Para desarrollador que quiere resultado con and al final puede utilizar el siguiente código:

$titleString = array('apple', 'banana', 'pear', 'grape'); 
$totalTitles = count($titleString); 
if($totalTitles>1) 
{ 
    $titleString = implode(', ' , array_slice($titleString,0,$totalTitles-1)) . ' and ' . end($titleString); 
} 
else 
{ 
    $titleString = implode(', ' , $titleString); 
} 

echo $titleString; // apple, banana, pear and grape 
0
$fruit = array('apple', 'banana', 'pear', 'grape');  
$commasaprated = implode(',' , $fruit); 
0

Una solución funcional sería algo así:

$fruit = array('apple', 'banana', 'pear', 'grape'); 
$sep = ','; 

array_reduce(
    $fruits, 
    function($fruitsStr, $fruit) use ($sep) { 
     return (('' == $fruitsStr) ? $fruit : $fruitsStr . $sep . $fruit); 
    }, 
    '' 
); 
Cuestiones relacionadas