2011-11-09 10 views
7

Necesito concatenar un número indeterminado de cadenas, y me gustaría un espacio entre dos cadenas contiguas. Al igual que a b c d e f.La mejor manera de concatenar cadenas en PHP con espacios entre

Además, no quiero ningún espacio inicial o final, ¿cuál es la mejor manera de hacerlo en PHP?

+0

¿Cómo se almacenan esas cadenas? ¿Están en una matriz? ¿O en variables separadas? – kapa

+0

Son variables separadas, y si el valor variable no está establecido o una cadena vacía, no quiero que se incluya en la cadena concatenada. – freshest

+0

@freshest ¿Y cómo se generan las variables? ¿No puedes poner los valores en una matriz en lugar de variables libres? – deviousdodo

Respuesta

25

¿Quiere decir $str = implode(' ', array('a', 'b', 'c', 'd', 'e', 'f'));?

+0

Muchas gracias. – freshest

1

teniendo en cuenta que usted tiene todas estas cadenas recogidos en una matriz, una forma de hacerlo podría ser el canal una sentencia foreach como:

$res = ""; 
foreach($strings as $str) { 
    $res.= $str." "; 
} 

if(strlen($res > 0)) 
    $res = substr($res,-1); 

de esta manera se puede tener control sobre el proceso para futuros cambios.

+3

Suena excesivo cuando tienes 'implode()'. – kapa

+0

yay, lo sé, pero normalmente me gusta tener las cosas abiertas y bajo control que me dan la libertad de hacer cambios en cualquier momento cuando me enfrento a tipos de datos desconocidos, porque ahora es una serie de cadenas pero nunca se sabe lo que ocurre durante el desarrollo , entonces me gusta tener ese tipo de libertad Siempre tengo tiempo para cambiarlo a un simple implode/join por lo que estoy seguro de cosas. – holographix

+1

Su solución (uso de 'foreach') supone que las cadenas están en una matriz. El uso de 'implode' también supondría que las cadenas están en una matriz. No veo la libertad aquí, solo veo un montón de líneas innecesarias que disminuyen la legibilidad. – kapa

3
$strings = array(" asd " , NULL, "", " dasd ", "Dasd ", "", "", NULL); 

function isValid($v){ 
return empty($v) || !$v ? false : true; 
} 

$concatenated = trim(implode(" ", array_map("trim", array_filter($strings, "isValid")))); 

//"asd dasd Dasd" 
3
function concatenate() 
{ 
    $return = array(); 
    $numargs = func_num_args(); 
    $arg_list = func_get_args(); 
    for($i = 0; $i < $numargs; $i++) 
    { 
     if(empty($arg_list[$i])) continue; 
     $return[] = trim($arg_list[$i]); 
    } 
    return implode(' ', $return); 
} 

echo concatenate("Mark ", " as ", " correct"); 
2

Una manera sencilla es:

$string="hello" . " " . "world"; 
2

sólo quiero añadir a deviousdodo a contestar que si hay un caso que no son cadenas vacías en la matriz y no desea que éstos para aparecer en la cadena concatenada, como "a, b, d ,, f", entonces será mejor utilizar lo siguiente:

$ str = implode (',', array_filter (array ('a', 'b', '', 'd', '', 'f')));

Cuestiones relacionadas