2009-12-04 20 views
6

Después de haber utilizado Java durante mucho tiempo, mi método estándar para crear cadenas largas pieza por pieza era agregar los elementos a una matriz y luego implosionar la matriz.Concatenación de cadenas vs implosión de matriz en PHP

$out[] = 'a'; 
$out[] = 'b'; 
echo implode('', $out); 

Pero luego con una gran cantidad de datos.

La alternativa (estándar de PHP) es utilizar la concatenación de cadenas.

$out = 'a'; 
$out .= 'b'; 
echo $out; 

Para mi sorpresa, no parece haber diferencia de velocidad entre ambos métodos. Cuando hay una diferencia de tiempo significativa, generalmente es la concatenación la que parece más rápida, pero no todo el tiempo.

Así que mi pregunta es: ¿hay otras razones para elegir un enfoque sobre el otro, aparte del estilo y la legibilidad del código?

+1

PHP ist no Java. Entonces no se sorprenda de que difieran. – Gumbo

+0

En PHP, las cadenas no son inmutables o incluso objetos. – Powerlord

Respuesta

8

Para mí, usar una matriz implica que vas a hacer algo que no se puede hacer con una simple concatenación de cadenas. Como ordenar, verificar la singularidad, etc. Si no está haciendo algo así, la concatenación de cadenas será más fácil de leer en un año o dos por alguien que no conoce el código. No tendrán que preguntarse si la matriz va a ser manipulada antes de implosionar.

Dicho esto, tomo el enfoque de matriz implosionada cuando necesito construir una cadena con comas o "y" entre palabras.

3

Elija la más legible. Siempre. En este caso, tomaría el segundo nombre. Luego optimízala, si es un cuello de botella.

+0

No, no es un cuello de botella, solo curiosidad. De todos modos ya mencioné la legibilidad. – Matijs

+1

Solo puedo aceptar esto; nunca haga algo, ya que un microensayo indica que es un 0,0001% más rápido. con XDebug o zendDebugger hay perfiladores para PHP y, si eso no es suficiente, también hay formas de perfilar el tiempo de ejecución de PHP, el tiempo empleado allí es mucho mejor que utilizar el código "optimizado" (y a menudo es incluso más económico ejecutar más hardware que pagando al desarrollador) – johannes

+0

+1 simplemente elija el más apropiado. Si 'implode' resuelve el problema elegantemente, úselo. –

3

Uno (sutil) diferencia es claramente visible cuando se genera una cadena de caracteres separados-:

<?php 
$out[] = 'a'; 
$out[] = 'b'; 
echo implode(',', $out); 

foreach($out as $o) { 
    echo $o . ','; 
} 

?> 

El primero se imprimirá a,b cuando éste se imprimirá a,b,. Por lo tanto, a menos que use una cadena vacía como separador, como usó en su ejemplo, generalmente se prefiere usar implode().

+0

Uno podría hacer: $ first = true; foreach ($ out as $ o) { if ($ first) $ first = false; else echo ','; echo $ o; } Eso debería darle una, b en su lugar. –

+1

@Raney: ¿por qué todos los problemas cuando 'implode()' es más fácil? – Lukman

2

La guerra santa concatenación vs implosión aparte: No, no hay diferencia.

0

depende de lo que quiere hacer con la cadena/matriz y como se crea que

si se comienza con una matriz y necesita ordenar it/manipular ciertos elementos, entonces sugiero implosionar

aparte de eso, generalmente utilizo la concatenación

Cuestiones relacionadas