2011-11-09 12 views
7

Ho bisogno di concatenare un numero indeterminato di stringhe, e mi piacerebbe uno spazio tra due stringhe adiacenti. Mi piace così a b c d e f.Il modo migliore per concatenare stringhe in PHP con spazi tra

Anche io non voglio spazi iniziali o finali, qual è il modo migliore per farlo in PHP?

+0

Come memorizzate quelle stringhe? Sono in un array? O in variabili separate? – kapa

+0

Sono variabili separate, e se non è possibile impostare il viariable o una stringa vuota, non lo voglio includere nella stringa concatenata. – freshest

+0

@freshest E come vengono generate le variabili? Non puoi inserire i valori in una matrice invece di variabili libere? – deviousdodo

risposta

25

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

+0

Grazie mille. – freshest

1

visto che avete tutte queste stringhe raccolti in una matrice, un modo per farlo potrebbe essere attraverso un frase foreach come:

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

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

in questo modo è possibile avere il controllo sul processo per le modifiche future.

+3

Suona eccessivo quando hai 'implode()'. – kapa

+0

yay, lo so, ma di solito mi piace avere le cose aperte e sotto controllo che mi danno la libertà di apportare modifiche in qualsiasi momento quando mi trovo di fronte a tipi di dati sconosciuti, perchè ora è una serie di stringhe ma non si sa mai cosa succede durante lo sviluppo , quindi mi piace avere quel tipo di libertà. Ho sempre il tempo di cambiarlo in un semplice implode/join per quanto sono sicuro di cose. – holographix

+1

La tua soluzione (utilizzo di 'foreach') presuppone che le stringhe siano in una matrice. L'uso di 'implode' assumerebbe anche che le stringhe siano in una matrice. Qui non vedo la libertà, vedo solo un mucchio di linee inutili che riducono la leggibilità. – 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

modo semplice è:

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

Voglio solo aggiungere alla deviousdodo Rispondiamo che se c'è un caso che ci sono stringhe vuote nella matrice e non si desidera che questi per apparire nella stringa concatenata, come "a, b ,, d ,, f", allora sarà meglio usare il seguente:

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

Problemi correlati