2012-05-11 7 views
2

ここに問題があります。 配列内の改行で文字のリストが爆発しています。その上でユニークな配列を実行します。期待どおりに動作していません。以下 コードです:array_uniqueがPHPで期待どおりに動作しない

$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); 

結果は、あなたがあなたの文字列が改行のための\r\nの配列を有していることを考慮に入れることができなかったしました

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

+1

代わりに 'print_r'の' var_dump'を使用してください。それはあなたの弦が違うことを伝えます。 – hakre

答えて

7

print_rの代わりにvar_dumpを使用すると、「テスト」(take a look at codepad)の違いがわかります。

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

これを防ぐには既にarray_mapを使用していますが、後者のコードではretun-value(参照では機能しません)を使用するのを忘れています。その行に変更します。

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

これを実行した後に、あなたが期待するもの(see at codepad again)を取得します。

+1

+1は、var_dumpの言及のために。 –

+0

これが機能しました。おかげでoezi – Yalamber

+0

ありがとう!それは実際に動作します! – GianFS

2

です。爆発では、\n部分のみを削除しましたので、あなたの結果は、実際にどのように見えるかです:

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

しかし、\rは、目に見える文字(コードがそれを見ていても)として印刷されません。

1

次の2つの主要な方法で複数行のテキストを分割することができます:

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

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

関連する問題