2009-08-18 18 views
6

Tengo una cadena larga en php que no contiene líneas nuevas ('\ n').PHP cadena larga sin línea nueva

Mi convención de codificación no permite líneas de más de 100 caracteres.

¿Hay alguna manera de dividir mi cadena larga en varias líneas sin utilizar el. Operador que es menos eficiente: no necesito concaturar 2 cadenas, ya que se pueden dar como una cadena simple .

Gracias!

Y

Respuesta

0

Con la sintaxis heredoc (o nowdoc, dependiendo de sus necesidades, comprobar el enlace de documentación):

$multiline = <<<EOT 
My name is "$name". I am printing some $foo->foo. 
This should print a capital 'A': \x41 
EOT; 
$singleline = str_replace("\n","",$multiline); 

Pero esto es una mierda ... lo siento :-)

+3

El problema con heredoc es que incluirá los caracteres de nueva línea en la cadena, que luego tendrían que ser eliminados para obtener la "cadena que no contiene líneas nuevas" que especificó la pregunta. – Amber

+0

Puede quitarlos ya que Lior muestra –

+0

Sí, sin embargo, eso también tendría un impacto en el rendimiento igual que el uso de la concatenación. – Amber

1

Usted podría quitar los caracteres de nueva línea de la cadena:

$myStr = " 
    here is my string 
    and it is spread across multiple lines 
    "; 
    $myStr = str_replace("\n", "", $myStr); 

Debe todavía use el operador de concatenación (.) para tales cosas. La penalización de rendimiento aquí es insignificante si está utilizando el almacenamiento en memoria caché de opcode (APC) y esto realmente no sería nada notable cuando se toma acceso a BD y lógica adicional (incluidos bucles) en la ecuación de tiempo de ejecución.

Actualización:

dar a la página debajo de una lectura. La conclusión anterior no está disponible en el texto, pero un examen cuidadoso debería mostrar que es válida.

http://blog.golemon.com/2006/06/how-long-is-piece-of-string.html

+0

¿Cómo afecta el almacenamiento en caché de código de operación la velocidad de concatenación de cadenas? –

+0

El analizador tratará las cadenas sin elementos dinámicos para que sean una cadena larga, soltando los operadores de concatenación. He profundizado en este tema hace un tiempo. Actualizaré esta respuesta con el artículo relacionado una vez que logré encontrarla nuevamente. –

2

Este es el código correcto, que resuelve todos los problemas:

$myStr = " 
    here is my string 
    and it is spread across multiple lines 
    "; 
    $myStr = str_replace(array("\r","\n"), "", $myStr); 

Se basa en la respuesta de Lior Cohen, pero también quita retornos de carro "\ r".

Cuestiones relacionadas