2012-07-26 3 views
3

I 쉼표로 구분하여 여러 줄의 텍스트 파일에서 가져온 배열 요소를 병합하기 위해 노력하고있어 :PHP 여분의 공간이 후 array_merge()

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

내가 싶어하는 10 개 항목에 하나의 배열입니다 그 안에.

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

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

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

) 

는 왜 공백이 :

<?php 

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

?> 

문제는, 내가 라인 엔딩 후 점점 반환 것 같다 : 내가 해봤 코드는 이것이다? 나는 어떻게 그들을 제거합니까?

답변

1

공백이 아니며 줄 바꿈 (\n)입니다.

입력 파일의 모든 내용이 배열에 표시되며 배열 요소로 분할됩니다. file() 함수는 파일을 한 줄씩 파싱하고 file()에 의해 꺼내 진 각 줄에는 줄을 끝내는 문자가 포함됩니다.

공백에서 trim()을 (를) 끕니다. 여기에는 뒤 공백과 탭을 제거하는 추가 이점이 있습니다.

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

원하는 결과가 있습니까?

+0

감사합니다. – Graham

3

배열에 삽입하기 전에 에 을 추가하여 문자열의 시작과 끝에서 공백 문자를 제거하십시오. 귀하의 경우를 들어

먼저 임시 변수에 저장해야합니다 :

$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

2

file() 통화에 FILE_IGNORE_NEW_LINES 플래그를 추가합니다.

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

+1, 멋지 네요. 그게 꼭 필요한 것입니다. 여러 개의 정답을 선택할 수 있기를 바랍니다. – Graham