2011-07-28 6 views
0

아주 간단한 목록을 공백을 구분 기호로 사용하여 분해하려고합니다. 그러나 다음 문자열에 문제가 있습니다 ...PHP 문자열 간격 끊기 문제

"+0.59 - + 0.58 %" "+0.06 - + 0.14 %"-0.47 - -1.07 % ""-0.77 - -0.20 % "" // 입력

각각의 공간으로 구분하도록되어 생성 된 배열 (인용도 제거)

어레이 ([0] => 0.59 [1] => - [2] => + 0.58 % +0.06 [3] => - [4] => + 0.14 % -0.47 [5] => - [6] => -1.07 % -0.77 [7] => - [8] =>)

기본적으로 공백이 올바르게 인식되지 않습니다. 나는 이미/n/r과 '/ \ s */m'을 통해 그것을 분리하려고 시도했다.

다음은 내 코드 스 니펫입니다.

$open = fopen("http://finance.yahoo.com/d/quotes.csv?s=$ticker&f=c&e=.csv", "r"); 
$quote = fread($open, 2000); 
fclose($open); 
$quote = explode(" ", $quote); 
foreach ($quote as &$value) { 
    $value = str_replace('"',"",$value); 
} 
//print_r($tickerlist); 
print_r($quote); 
+0

'/ n'? '\ n'을 원하셨습니까? 대신 무엇이 발생합니까? 파일을 열어 올바르게 읽었습니까? – KingCrunch

+1

해당 서비스는 한 줄에 1 ""로 묶인 데이터 세트를 제공하므로, 한 번에 한 줄씩 데이터를 가져 오기 위해 fgets를 사용하면 폭발 할 수 있습니다. – fvu

+0

그 오타를 불쾌하게 여깁니다. 전 슬래시가 아닌 특수 문자열 문자에 백 슬래시를 사용하고있었습니다. – jab

답변

2

를 열고 적절한 편집기에서 파일 (정력이에 대한 좋은 것입니다. 어쩌면 메모장 ++) 및 tab 성격과 \r\n 확인합니다.

0

$newArr = explode('" "', $quote); 
+0

단락 기호의 일부로 큰 따옴표가 없다는 것을 의미하지 않는 한 말입니다. 폭발하려는 정확한 문자열을 보여줄 수 있습니까? 배열이 제대로 보이는지 보여 주시겠습니까? – notam2774

+0

'$ newArr = explode (' ", substr ($ quote, 1, -1));' –

0

데이터를 변환하려는 경우이 함수를 사용하여 csv 파일을 구문 분석하여 배열로 간단하게 가져올 수 있습니다.

function csv2array($string, $separatorChar = ',', $enclosureChar = '"', $newlineChar = "\n") 
{ 
    $array = array(); 
    $size = strlen($string); 
    $columnIndex = 0; 
    $rowIndex = 0; 
    $fieldValue = ""; 
    $isEnclosured = False; 

    for($i=0; $i<$size;$i++) 
    { 
     $char = $string{$i}; 
     $addChar = ""; 

     if($isEnclosured) 
     { 
      if($char == $enclosureChar) 
      { 
       if($i+1<$size && $string{$i+1} == $enclosureChar) 
       { 
        $addChar = $char; 
        $i++; 
       } 
       else 
       { 
        $isEnclosured = false; 
       } 
      } 
      else 
      { 
       $addChar=$char; 
      } 
     } 
     else 
     { 
      if($char==$enclosureChar) 
      { 
       $isEnclosured = true; 
      } 
      else 
      { 
       if($char==$separatorChar) 
       { 
        $array[$rowIndex][$columnIndex] = $fieldValue; 
        $fieldValue = ""; 
        $columnIndex++; 
       } 
       elseif($char==$newlineChar) 
       { 
        //echo $char; 
        $array[$rowIndex][$columnIndex] = $fieldValue; 
        $fieldValue=""; 
        $columnIndex=0; 
        $rowIndex++; 
       } 
       else 
       { 
        $addChar=$char; 
       } 
      } 
     } 

     if($addChar != "") 
     { 
      $fieldValue.=$addChar; 
     } 
    } 

    if($fieldValue) 
    { 
     $array[$rowIndex][$columnIndex] = $fieldValue; 
    } 

    return $array; 
} 

이것은 연관 양식의 모든 것을 구문 분석하고 그 배열을 반환합니다.