Ich bin mir nicht sicher, warum explodiert nicht für Sie nicht (es soll). Ich schlage PHP_EOL
als Trennzeichen vor und sehe, wie das dich packt. Aus Gründen des Vergleichs könnten Sie preg_match()
verwenden, aber das wird langsamer sein.
Code: (Demo)
$string='line1
line2
line3 line 3
line4
line five
line 6
line 7
line eight
line 9
line 10
line eleven';
for($x=1; $x<10; $x+=2){ // $x is the targeted line number
echo "$x preg_match: ";
echo preg_match('/(?:^.*$\R?){'.($x-1).'}\K.*/m',$string,$out)?$out[0]:'fail';
echo "\n explode: ";
echo explode(PHP_EOL,$string)[$x-1];
echo "\n---\n";
}
Ausgabe
1 preg_match: line1
explode: line1
---
3 preg_match: line3 line 3
explode: line3 line 3
---
5 preg_match: line five
explode: line five
---
7 preg_match: line 7
explode: line 7
---
9 preg_match: line 9
explode: line 9
---
Je mehr ich darüber nachdenke, könnte Sie ein Problem erleben mit Ihrem zitieren. Einfache Anführungszeichen geben \n
als zwei nicht-weiße Leerzeichen \
und n
wieder. Sie müssen doppelte Anführungszeichen verwenden, damit es wie ein Zeilenvorschubzeichen behandelt wird.
Another demo:
echo 'PHP_EOL ',explode(PHP_EOL,$string)[0]; // PHP_EOL works
echo "\n\n",'"\\n" ',explode("\n",$string)[0]; // "\n" works
echo "\n\n","'\\n' ",explode('\n',$string)[0]; // '\n' doesn't work, the newline character is "literally" interpreted as "backslash n"
Ausgang:
PHP_EOL line1 // This is correct
"\n" line1 // This is correct
'\n' line1 // The whole string is printed because there is no "backslash n" to explode on.
line2
line3 line 3
line4
line five
line 6
line 7
line eight
line 9
line 10
line eleven
Das Newline ist entweder '\ r \ n 'oder' \ n', so etwas wie dies funktionieren soll: '$ line = explode ('\ r \ n', $ Zeilen); echo $ line [1]; ' – Cyclonecode
@Cyclonecode ich habe es versucht, aber ich bekomme alle string in $ line [0] –
Können Sie Ihre Daten zu Ihrer Frage hinzufügen? –