Eu tenho uma string com quebras de linha no meu banco de dados. Quero converter essa string em uma matriz e, para cada nova linha, pular um lugar de índice na matriz.
Se a sequência for:
My text1
My text2
My text3
O resultado que eu quero é este:
Array
(
[0] => My text1
[1] => My text2
[2] => My text3
)
php
string
line-breaks
Johan
fonte
fonte
s($yourString)->normalizeLineEndings()
está disponível no github.com/delight-im/PHP-Str (biblioteca sob licença MIT), que possui muitos outros auxiliares de seqüência de caracteres úteis. Você pode dar uma olhada no código fonte.Respostas:
Você pode usar a
explode
função, usando "\n
" como separador:Por exemplo, se você possui este pedaço de código:
Você obteria esta saída:
Observe que você precisa usar uma cadeia de caracteres entre aspas duplas , portanto,
\n
na verdade , é interpretada como uma quebra de linha.(Consulte a página do manual para obter mais detalhes.)
fonte
\n
você pode usar a constante predefinidaPHP_EOL
.PHP_EOL
. Você deve usarpreg_split("/\\r\\n|\\r|\\n/", $value)
.Eu sempre usei isso com grande sucesso:
(atualizado com o final \ r, obrigado @LobsterMan)
fonte
\R
partidas\n
,\r
e\r\n
/\r?\n/
Uma quebra de linha é definida de maneira diferente em plataformas diferentes, \ r \ n, \ r ou \ n.
Usando RegExp para dividir a sequência, você pode combinar todas as três com \ R
Então, para o seu problema:
Isso corresponderia a quebras de linha no Windows, Mac e Linux!
fonte
$array = preg_split ('/\R/', $string);
preg_split("/\r\n|\n|\r/", $string)
melhor escolhaO PHP já conhece o (s) caractere (s) de nova linha do sistema atual. Basta usar a constante EOL.
fonte
trim()
as seqüências de caracteres resultantes para remover qualquer espaço em branco externo.Uma alternativa à resposta de Davids, que é mais rápida (muito mais rápida) é usar
str_replace
eexplode
.O que está acontecendo é:
como as quebras de linha podem ter diferentes formas, eu
str_replace
\ r \ n, \ n \ re \ com + n (e o \ n original são preservados).Em seguida, exploda
\n
e você terá todas as linhas em uma matriz.Eu fiz uma referência no src desta página e dividi as linhas 1000 vezes em um loop for e:
preg_replace
demorei uma média de 11 segundosstr_replace & explode
levou uma média de cerca de 1 segundoMais detalhes e informações sobre bencmark no meu fórumfonte
David: Ótima direção, mas você perdeu. isso funcionou para mim:
fonte
Você não precisa de funções preg_ * nem padrões de preg, nem str_replace dentro, etc .. para poder com sucesso quebrar uma string em array por novas linhas. Em todos os cenários, seja Linux / Mac ou m $, isso funcionará.
fonte
O "(em vez de ') é bastante importante, caso contrário, a quebra de linha não será interpretada.
fonte
StackOverflow não permitirá que eu comente a resposta de hesselbom (reputação insuficiente), por isso estou adicionando a minha ...
Isso funcionou melhor para mim porque também elimina os espaços em branco à esquerda (segundo \ s *) e à direita (primeiro \ s *) automaticamente e também ignora as linhas em branco (o sinalizador PREG_SPLIT_NO_EMPTY).
- = OPÇÕES = -
Se você deseja manter o espaço em branco à esquerda, basta se livrar do segundo \ s * e transformá-lo em um rtrim () ...
Se você precisar manter linhas vazias, livre-se do sinalizador NULL (é apenas um espaço reservado) e PREG_SPLIT_NO_EMPTY, assim ...
Ou mantendo os espaços em branco à esquerda e as linhas vazias ...
Não vejo nenhuma razão para que você queira continuar em branco, então sugiro deixar o primeiro \ s * lá. Mas, se tudo o que você deseja é dividir por nova linha (como o título sugere), é ESTE simples (como mencionado por Jan Goyvaerts) ...
fonte
m
modificador não é realmente necessário, é? Isso não afeta apenas^
e$
?Como outras respostas especificaram, certifique-se de usar,
explode
e nãosplit
porque o PHP 5.3.0split
está obsoleto. ou seja, o seguinte NÃO é o que você deseja fazer:LF = "\ n" = chr (10), CR = "\ r" = chr (13)
fonte
Para quem tenta exibir cronjobs em um crontab e fica frustrado com a forma de separar cada linha, use explodir:
usar '\ n' parece não funcionar, mas o chr (10) funciona bem: D
espero que isso poupe a alguém algumas dores de cabeça.
fonte
'\n'
não funciona porque seqüências de escape não são interpretados entre aspas simples, você precisa usar aspas duplas em vez disso:"\n"
em vez de'n'
Ler php.net/manual/en/language.types.string.phpvocê pode usar isso:
fonte
Você pode fazer um $ string = nl2br ($ string) para que sua quebra de linha seja alterada para
Dessa forma, não importa se o sistema usa \ r \ n ou \ n ou \ r
Então você pode alimentá-lo em uma matriz:
fonte
Esse é meu caminho:
Isso também ignorará todas as linhas vazias também.
fonte
matriz verdadeira:
Incorporar Online:
fonte
Peguei isso nos documentos php:
fonte
Este método sempre funciona para mim:
fonte
Usar apenas o pacote 'base' também é uma solução para casos simples:
fonte
Usando qualquer caractere especial entre a seqüência de caracteres ou quebra de linha
\n
usando o PHP explode, podemos conseguir isso.fonte