2012-05-11 104 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); 

結果是

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

+1

使用'var_dump',而不是'print_r'。它會告訴你這些字符串是不同的。 – hakre

回答

7

使用var_dump而不是print_r,您會看到「測試」(take a look at codepad)之間存在差異。

代碼包含\r\n作爲換行符和你在\n splittoing,所以\r仍然存在在除了最後一個所有entrys。

您已經在使用array_map來防止這種情況,但忘記了在後面的代碼中使用retun-value(它不適用於引用)。更改行:

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

這樣做後,你會得到你所期望的(see at codepad again)。

+1

爲var_dump提到+1。 –

+0

這工作。謝謝oezi – Yalamber

+0

謝謝!真的行! – GianFS

2

你沒有考慮到你的字符串有\r\n的換行符序列帳戶。在爆炸你只取出\n部分,你的結果卻貌似是:

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

然而,\r不打印作爲可見字符(即使代碼看到它)。

1

您可以通過兩種主要方式分爲多行文字:

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

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