2

ここに問題があります。配列内の改行ごとに文字のリストを展開しています。その上で一意の配列を実行します。しかし、期待どおりに機能していません。以下はコードです:

$list = "test
ok
test
test
ok
ok
test";
$list_explode = explode("\n", $list); //exploding the characters of the list from the input
//displaying unique 

array_map('trim', $list_explode);
$result = array_unique($list_explode);
print_r($result);

結果は

Array ( [0] => test [1] => ok [6] => test )

4

3 に答える 3

7

var_dump代わりに使用するprint_rと、「テスト」の間に違いがあることがわかります(コードパッドを見てください)。

あなたのコードに\r\nは改行が含まれており、で分割して\nいるため\r、最後のエントリを除くすべてのエントリにまだあります。

これを防ぐために既に使用していますがarray_map、後者のコードで戻り値を使用するのを忘れていました (参照では機能しません)。その行を次のように変更します。

$list_explode = array_map('trim', $list_explode);

これを行った後、期待どおりの結果が得られます (もう一度コードパッドを参照してください)。

于 2012-05-11T12:09:20.810 に答える
2

\r\n文字列に改行のシーケンスがあることを考慮に入れていません。爆発では、その\n部分のみを削除したため、実際の結果は次のようになります。

Array ( [0] => test\r [1] => ok [6] => test )

ただし、 は\r可視文字として出力されません (コードで認識されますが)。

于 2012-05-11T12:08:34.990 に答える
1

複数行のテキストを分割するには、主に次の 2 つの方法があります。

  1. 使用する$list_explode = array_map('rtrim', explode("\n", $list));

  2. 使用する$list_explode = preg_split("/\r?\n/", $list);

于 2012-05-11T12:11:33.387 に答える