PHP Tek-Line Multi-Line bir dize Dönüşümü nasıl?

4 Cevap php

Tek satırlık bir dizeye bir çok satırlı dize dönüştüren bir PHP string işlevi var mı?

Geri birden fazla satır içeren bir API bazı verileri alıyorum. Örneğin:

<p>Some Data</p>

<p>Some more Data</p>

<p>Even More Data</p>

Ben bir değişkene veri, daha sonra bir CSV belgenin parçası / "hücre" olarak değişken yankı olduğunu atayın.

It's breaking my CSV document. Instead of all content showing in one cell (when viewing in OpenOffice Calc), it shows in multiple cells and rows. It should be contained within one cell.

Ben dize dönüştürmek istiyorum:

<p>Some Data</p><p>Some more Data</p><p>Even More Data<p>

Ya da, ne bunun için en iyi düzeltme?

4 Cevap

Line conversion techniques

Approach 1

Eğer normal bir ifade kullanabilirsiniz açılma ve kapanma ...

etiketleri arasında gereksiz bir şey çıkarmak. Ben bu yüzden sadece referans olsun diye o kadar temizlenmiş değil.

$str = preg_replace("/(\/[^>]*>)([^<]*)(<)/","\\1\\3",$str);

Böyle satırsonlarının, boşluklarla ya da herhangi bir metin olarak p etiketleri arasında herhangi bir şerit olacak.

Approach 2

Ve yine delete-tek-linebreaks-ve-newlines yaklaşımla

$str = preg_replace("/[\r\n]*/","",$str);

Approach 3

Ya da biraz daha hızlı ancak esnek olmayan basit dize değiştirme yaklaşımı ile

$str = str_replace(array("\r","\n"),"",$str);

Bir tercihinizi yapın!

Comparison

Benim yöntemleri karşılaştırmak izin

Performance

Performans her zaman bu durumda, ikinci bir en hızlı yaklaşım görelidir.

(Alt iyidir)

Approach 1   111
Approach 2   300
Approach 3   100

Result

Approach 1
Strips everything between tags

Approach 2 and 3
Strips newline and linebreak characters

Bu senin paragraf etiketleri içinde dize için de geçerli olacak gibi besbelli yerleri kaldırmak istemiyorum, hat sadece kırar kaldıracaktır.

$str = str_replace(array("\n", "\r"), '', $str);

Sadece tüm yeni satır (\ n) ve satırbaşı (\ r) dizeden karakterleri kaldırmak gerekir. : PHP bu kadar basittir

$string = str_replace(array("\n", "\r"), '', $string);

Ben bir çok satırlı dize tek bir çizgi yapmak için bulunan en iyi yöntem bu gibi oldu

$newstring = str_replace(array("\r\n", "\n", "\r"), '', $oldstring);

This is similar to other answers but adds "\r\n", which must be the initial part of the array, so that it doesn't double up.