2012-02-01 9 views
29

En PHP 5.3 hay un nice function que parece hacer lo que quiera:primera línea de una cadena en PHP

strstr(input,"\n",true) 

Por desgracia, el servidor se ejecuta PHP 5.2.17 y el tercer parámetro opcional de strstr es no disponible. ¿Hay alguna manera de lograr esto en versiones anteriores en una línea?

+0

Es posible que desee utilizar comillas dobles alrededor de '' n. Cuando lo tenía entre comillas simples cuando creaba contenido de correo electrónico, el '\ n' solo aparecía como caracteres normales en lugar del carácter de nueva línea. – Svish

+0

¿por qué la restricción de "una línea"? – misterjinx

Respuesta

84

Aquí tiene

$str = strtok($input, "\n"); 

strtok() Documentation

+0

El método más rápido –

+0

sudor solución! – misterjinx

+0

No diría que es el más rápido (y no me molestaría con la comparación de velocidad en absoluto) pero aparentemente es el más corto * –

4
$first_line = substr($fulltext, 0, strpos($fulltext, "\n")); 

o algo similar harían el truco. Feo, pero viable.

3

tratar

substr(input, 0, strpos(input, "\n")) 
1

intente esto:

substr($text, 0, strpos($text, chr(10)) 
0

Usted puede usar combinado con strpossubstr. Primero encuentras la posición donde se encuentra el personaje y luego regresas esa parte de la cadena.

$pos = strpos(input, "\n"); 

if ($pos !== false) { 
echo substr($input, 0, $pos); 
} else { 
echo 'String not found'; 
} 

¿Esto es lo que quieres?

l.e. No noté la restricción de una línea, por lo que esto no es aplicable de la manera en que es. Puede combinar las dos funciones en una sola línea como sugirieron otras o puede crear una función personalizada que se llamará en una línea de código, según lo desee. Tu elección.

+0

no es un trazador de líneas – kinokijuf

+0

una línea de restricción? ¿Hay alguna razón para eso?usted sabe que siempre puede crear su propia función que se puede llamar más adelante en solo 'una línea' de código, ¿verdad? – misterjinx

2

echo str_replace(strstr($input, '\n'),'',$input);

1
list($line_1, $remaining) = explode("\n", $input, 2); 

Hace que sea fácil de obtener la línea superior y el contenido dejados atrás si desea repetir la operación. De lo contrario, use substr como se sugiere.

+0

Puedes omitir el resto –

+0

Podrías, pero como dije si querías las líneas X superiores, entonces usé mi "lista original" ($ line_1, $ remaining) = explode ("\ n", $ input, 2); " permitiría una acción repetitiva. Con esta edición mi publicación es bastante sin sentido !? Solo parece una edición muy extraña para hacer ... –

+0

Bueno para las llamadas consiguientes strtok aún sería mejor. –

9

Es tarde pero se puede usar explotar.

<?php 
$lines=explode("\n", $string); 
echo $lines['0']; 
?> 
+3

¿Por qué utiliza claves de cadena en este ejemplo? ¿Debería ser '$ lines [0]'? – trejder

+1

Nota: si solo necesita la primera línea, esto es ineficiente. P.ej. si '$ string' es cien megabytes y la primera línea es solo algunos bytes, esta solución desperdicia cien megabytes de memoria y tu secuencia de comandos puede incluso terminar cuando alcances el límite de memoria. –

+0

'current (explode (" \ n ", $ string));' acorta esto y resuelve el problema de la variable intermedia y el desperdicio de memoria. – billynoah

1

no depende del tipo de símbolo de salto de línea.

(($pos=strpos($text,"\n"))!==false) || ($pos=strpos($text,"\r")); 

$firstline = substr($text,0,(int)$pos); 

$ primera línea contiene ahora la primera línea de texto o cadena vacía, si no hay rotura símbolos encontrados (o romper símbolo es un primer símbolo en el texto).

0

Muchas veces la manipulación de cadenas enfrentará vars que comienzan con una línea en blanco, así que no se olvide de evaluar si realmente desea considerar las líneas blancas al principio y al final de la cadena o recortarla. Además, para evitar errores de SO, use PHP_EOL usado para encontrar el carácter de nueva línea de una manera compatible con plataformas cruzadas (When do I use the PHP constant "PHP_EOL"?).

$lines = explode(PHP_EOL, trim($string)); 
echo $lines[0]; 
Cuestiones relacionadas