2012-07-26 93 views
3

我试图合并从多行文本文件导入数组元素,以逗号分隔:PHP额外的空间后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 

) 

为什么空间呢?我如何摆脱它们?

回答

1

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

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

听起来好像你想要trim()关闭空白。请注意,这有助于删除尾随空格和制表符。

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

这是否给出你想要的结果?

+0

谢谢,这正是我所需要的。 – Graham 2012-07-26 23:12:47

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); 
+0

+1,谢谢你;我明白为什么你需要一个临时变量,如果你想修剪每一个变量,但我只需要修剪线条,而Ghoti首先得到答案。 – Graham 2012-07-26 23:12:32

2

添加FILE_IGNORE_NEW_LINES标志您的通话file()

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

+1,这很棒,这也正是我所需要的。希望我可以选择多个正确答案。 – Graham 2012-07-26 23:13:46