2011-12-08 34 views
8

Vorrei avvolgere tutti gli elementi di un array con qualcosa di simile, ma non voglio un sacco di linee o di ciclo foreachserie di elementi avvolgere tutti gli elementi

$links = array('london','new york','paris'); 

// the outcome should be 

<a href="#london">london</a> 
<a href="#new york">new york</a> 
<a href="#paris">paris</a> 
+1

Quindi, dopo aver escluso gli approcci canonici e sensibile, che altro hai provato? –

+0

beh io sono confortevole con ciclo foreach Voglio solo vedere se è possibile. – Val

+0

Perché nessun ciclo 'foreach'? Oh, hai appena risposto come ho postato! – Ryan

risposta

23

Come su array_map?

$links = array('london', 'new york', 'paris'); 
$wrapped = array_map(
    function ($el) { 
     return "<a href=\"#{$el}\">{$el}</a>"; 
    }, 
    $links 
); 

Demo (Clicca fonte)

Senza PHP> 5.3, non è possibile utilizzare una funzione lambda, quindi avrai bisogno di qualcosa di simile:

function wrap_those_links($el) { 
     return "<a href=\"#{$el}\">{$el}</a>"; 
} 

$links = array('london', 'new york', 'paris'); 
$wrapped = array_map('wrap_those_links', $links); 

Demo for PHP 5.2 (Anche in questo caso, scegliere Origine)

+0

Errore di analisi: errore di sintassi, T_FUNCTION imprevisto, in attesa di ')' in ... on line 183, dà un errore ma è qualcosa di figo :) – Val

+0

Non si deve eseguire PHP 5.3.0 :) - È una soluzione semplice, una sec aggiornerò la mia risposta – nickb

+2

o 'create_function' –

7

Prova join('\n', array_map(function($a) { return "<a href=\"#$a\",>$a<\\a>";}, $links));

+2

... o perché invece di utilizzare la funzione denominata "implode", ha utilizzato l'alias "join" e non ha formattato la risposta in modo facilmente leggibile, né fornito una spiegazione sui limiti del suggerimento (PHP 5> = 5,3). Implode è molto più implicito quando si tratta di auto-documentazione. – SEoF

+0

Penso che questa risposta non sia giusta, usando singole invece di virgolette doppie e una barra rovesciata invece di una barra, dovrebbe essere: 'join (" \ n ", array_map (function ($ a) {return" $a " ;}, $ links)); ' – superUntitled

0

C'è soluzione one-line:

trim(json_encode(array_values($array)) , '[]'); 

uscita sarà simile:

"one","two","three" 
Problemi correlati