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你会看到“测试”之间的区别(看看codepad)。

您的代码包含\r\n换行符,并且您正在拆分\n,因此\r除最后一个之外的所有条目仍然存在。

您已经使用array_map它来防止这种情况,但忘记在后面的代码中使用 retun-value (它不能通过引用工作)。将该行更改为:

$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

您可以通过两种主要方式拆分多行文本:

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

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

于 2012-05-11T12:11:33.387 回答