2011-12-08 27 views
8

me gustaría para envolver todos los elementos de una matriz con algo parecido, pero no quiero una gran cantidad de líneas o bucle foreachelemento de la matriz envolver todos los elementos

$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

Así, después de haber descartado los enfoques canónicas y sensatos, ¿qué más se intenta? –

+0

bueno, me siento cómodo con el ciclo foreach. Solo quiero ver si es posible. – Val

+0

¿Por qué no 'foreach' loops? ¡Oh, acabas de responder cuando publiqué! – Ryan

Respuesta

23

¿Qué tal array_map?

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

Demo (Haga clic en Origen)

Sin PHP> 5.3, no se puede utilizar una función lambda, por lo que tendrá algo como esto:

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 (Una vez más, haga clic en Origen)

+0

Parse error: error de sintaxis, inesperado T_FUNCTION, esperando ')' en ... en la línea 183, da un error, pero eso es algo genial :) – Val

+0

No debe ejecutar PHP 5.3.0 :) - Es una solución fácil, uno seg. Actualizaré mi respuesta – nickb

+2

O 'create_function' –

7

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

+2

... o porque en lugar de utilizar la función nombrada "implode", ha usado el alias "join", y no ha formateado la respuesta de una manera fácil de leer, o ha brindado una explicación sobre las limitaciones de la sugerencia (PHP 5> = 5.3). Implode es mucho más implícito en lo que respecta a la auto-documentación. – SEoF

+0

Creo que esta respuesta no es del todo correcta, usando comillas simples en lugar de dobles, y una barra invertida en lugar de barra diagonal, debería ser: 'join (" \ n ", array_map (función ($ a) {return" $a " ;}, $ enlaces)); ' – superUntitled

0

No es solución de una línea:

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

de salida se verá así:

"one","two","three" 
Cuestiones relacionadas