47

PHP 5.3 には、私がやりたいと思われる素敵な関数があります。

strstr(input,"\n",true)

残念ながら、サーバーは PHP 5.2.17 を実行しており、オプションの 3 番目のパラメーターstrstrは使用できません。以前のバージョンでこれを1行で達成する方法はありますか?

4

11 に答える 11

123

行が 1 文字 ("\n") または 2 文字 ("\r\n") で区切られる場合、最も確実な方法は次のとおりです。

$line = preg_split('#\r?\n#', $input, 0)[0];

空の文字列であっても、最初の改行の前の任意のシーケンスに対して、および

$line = preg_split('#\r?\n#', ltrim($input), 0)[0];

最初の空でない文字列。

この回答が最初に書かれたとき、ほぼ 10 年前に、いくつかの微妙なニュアンスが特徴でした。

  • 行区切り文字が常に単一の「\ n」文字であるという前提でオープニングポストに従っているため、ローカライズされすぎていましたが、常にそうであるとは限りません. PHP_EOLローカルシステム設定の影響を受けずに外部データを処理できるため、使用は解決策ではありません
  • 最初の空でない文字列が必要であると想定されていました
  • explode()またはを 1 行で使用する方法がなかったため、 を使用preg_split()したトリックstrtok()が提案されました。しかし、その直後、Nikita Popovによって提案されたUniform Variable Syntaxのおかげで、これらの関数の 1 つをきちんとしたワンライナーで使用できるようになりました。

しかし、この質問がある程度人気を博したため、回答で考えられるすべてのエッジ ケースをカバーすることが不可欠です。しかし、歴史的な理由から、ここに元の答えがあります

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

UNIX形式のテキストから最初の空でない行を返します。

ただし、C の元の strtok() 関数のマニュアル ページに記載されているように、strtok()「文字列の先頭または末尾の区切り文字は無視される」ため、行区切り記号が異なる可能性があり、の動作はそれほど単純ではありません。 、この機能は慎重に使用することをお勧めします。

于 2012-02-01T14:54:54.240 に答える
13

遅くなりましたが、爆発を使用できます。

<?php
$lines=explode("\n", $string);
echo $lines['0'];
?>
于 2012-11-06T20:09:54.463 に答える
6
$first_line = substr($fulltext, 0, strpos($fulltext, "\n"));

またはそのあたりの何かがうまくいくでしょう。醜いが、実行可能。

于 2012-02-01T14:44:09.133 に答える
3

試す

substr( input, 0, strpos( input, "\n" ) )
于 2012-02-01T14:44:38.447 に答える
2

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

于 2012-02-01T14:49:26.117 に答える
1
list($line_1, $remaining) = explode("\n", $input, 2);

操作を繰り返したい場合に、一番上の行と取り残されたコンテンツを簡単に取得できます。それ以外の場合は、提案どおりに substr を使用してください。

于 2012-02-01T14:50:23.930 に答える
1

これを試して:

substr($text, 0, strpos($text, chr(10))
于 2012-02-01T14:44:38.523 に答える
0

strposと組み合わせてお使いいただけますsubstr。最初に文字が配置されている位置を見つけてから、文字列のその部分を返します。

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

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

これは、あなたの望むことですか ?

le 1 行の制限に気付かなかったので、このままでは適用されません。他の人が提案したように、2 つの関数を 1 行で組み合わせることができます。また、必要に応じて、1 行のコードで呼び出されるカスタム関数を作成することもできます。あなたの選択。

于 2012-02-01T14:44:45.457 に答える