2010-09-24 25 views

risposta

16

In alternativa è possibile utilizzare la funzione rtrim come:

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

Sì, dimenticato il taglio. +1 –

+0

Mi piace di più, grazie. – Bastien

+0

php troppo cattivo non supporta 'unset ($ result [strlen ($ result) -1])'. Sarebbe così bello ... – NikiC

7

Un metodo è quello di utilizzare 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; 

Un altro metodo sarebbe utilizzando implode

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

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

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

grazie per il vostro aiuto – Bastien

0

provare questo codice dopo foreach condition then echo $ result1

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

Non mi piace l'idea di utilizzare il substr, poiché si tratta dello stile di programmazione errata. L'idea è di concatenare tutti gli elementi e separarli con speciali frasi "separanti". L'idea di chiamare la sottostringa per questo è come usare un laser per sparare agli uccelli.

Nel progetto al quale sto attualmente lavorando, cerchiamo di eliminare le cattive abitudini nella codifica. E questo campione è considerato uno di loro. Noi costringiamo programmatori di scrivere questo codice come questo:

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

Lo scopo di questo codice è molto più chiara, rispetto a quello che utilizza substr. Oppure puoi semplicemente usare la funzione implode (il nostro progetto è in Java, quindi abbiamo dovuto progettare la nostra funzione per concatenare le stringhe in quel modo). Si dovrebbe usare la funzione substr se si ha realmente bisogno di quello. Qui questo dovrebbe essere evitato, dal momento che è un segno di cattivo stile di programmazione.

+0

Com'è un segno di cattivo stile di programmazione? Ti dispiacerebbe elaborare su quello per tutti noi? Per quanto posso vedere, non ostacola la performance. Riesco a capire la parte della chiarezza, ma allo stesso tempo non è difficile leggere su quale substr si fa a capirlo. Grazie! –

+0

IMHO, ogni strumento dovrebbe essere usato appropriatamente nei programmi, e NON è lo scopo secondario di servire per la concatenazione di stringhe, è stato progettato per altri problemi. Inoltre, questo codice con substr appare chiaro solo allora è in un posto. Se ci sono molti frammenti come questo, il codice diventa illeggibile. Pertanto nel nostro progetto siamo passati alla normale concatenazione e abbiamo anche fatto una funzione speciale per questo. Ora la parte del progetto che si occupa di stringhe è molto più leggibile. –

+0

Grazie mille per questa soluzione eccezionale e professionale. (y) –

1

Io uso sempre questo metodo:

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

Scarsa idea di usare strlen per questo. Vedi l'articolo di "Back to basics" di Joel Spolsky per capire perché. Basta usare un flag booleano per eseguire tale controllo, perché nel peggiore dei casi (array ha N elementi - singoli caratteri) si finirà con la complessità O (N^2). –

+0

In generale, non utilizzare le funzioni di stringa per ottenere un certo effetto, che può essere facilmente ottenuto con semplici trucchi di programmazione (lo stesso vale per l'utilizzo di substr per eliminare l'ultima virgola - è meglio non generare l'ultimo comman a tutti). –

10

Cosa non mi piace tutte le ricette precedenti.

Php non è C e ha metodi di livello superiore per affrontare questo particolare problema.

ho inizierà dal punto in cui si dispone di un array come questo:

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

si può costruire una tale varietà da quella iniziale utilizzando un loop o array_map() funzione. Si noti che sto usando stringhe a virgolette singole. Questa è una micro-ottimizzazione se non hai nomi variabili che devono essere sostituiti.

Ora è necessario generare una stringa CSV da questo array, si può fare in questo modo:

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

Questo approccio è utile per modificare il delimitatore più facilmente. Inoltre, è possibile esplodere la stringa in array in un secondo momento simile a questo.Non sono sicuri del restringimento delle prestazioni – thethanghn

+0

+1 per l'approccio più pulito. – NikiC

+0

Mi piace anche questo. Non eseguire il ciclo se non è necessario. – Powertieke

0

questo farebbe:

rtrim ($string, ',') 
1

Supponendo che la matrice è un indice, questo è lavorando per me. I loop $ i e test $ i contro la chiave $.Al termine della chiave, le virgole non vengono stampate. Notare che l'IF ha due valori per assicurarsi che il primo valore non abbia una virgola all'inizio.

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

vedono questo esempio si può facilmente capire

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