array_merge()之后的PHP额外空间

时间:2012-07-26 04:56:13

标签: php arrays array-merge

我正在尝试合并从多行文本文件导入的数组元素,用逗号分隔:

$ cat input.txt 
one,two,three,four
red,blue,green
human,klingon,dolphin

我想要的是一个包含10个项目的单个数组。我试过的代码就是:

<?php

$fa=file("input.txt");
$w=array();
foreach($fa as $combo) {
    $w=array_merge($w,explode(",",$combo));
}
print_r($w);

?>

问题是,我似乎在行结束后获得了回报:

Array
(
    [0] => one
    [1] => two
    [2] => three
    [3] => four

    [4] => red
    [5] => blue
    [6] => green

    [7] => human
    [8] => klingon
    [9] => dolphin

)

为什么那里有空格?我如何摆脱它们?

3 个答案:

答案 0 :(得分:3)

在插入数组之前添加trim(),以便从字符串的开头和结尾开始修剪远离空白字符。

对于您的情况,您必须首先保存临时变量:

$words = explode(',', $combo);

// Trim away white spaces for each words
$words = array_map('trim', $words);

// Now they're trimmed, array_merge them
$w = array_merge($w, $words);

答案 1 :(得分:2)

FILE_IGNORE_NEW_LINES标记添加到file()来电。

$fa=file("input.txt", FILE_IGNORE_NEW_LINES);

答案 2 :(得分:1)

它们不是空格,它们是换行符(\n)。

输入文件中的所有内容都在数组中表示,它只是拆分为数组元素。 file()函数逐行解析您的文件,file()引入的每一行都包含一个结束该行的字符。

听起来你想要trim()离开空白。请注意,这具有删除尾随空格和制表符的附加好处。

    $w=array_merge($w,explode(",",trim($combo)));

这会给你想要的结果吗?