2013-03-29 1 views
0

내 문제에 관한 대부분의 토론을 읽었지만 해결책을 찾지 못했습니다. 그래서, 내가 읽었던 .csv 파일이 있는데, 모든 내용을 추출하고 다차원 배열을 채 웁니다.배열에서 csv를 쓸 수 없습니다

if (($handle = fopen("dateRegion.csv", "r")) !== FALSE) { 
# Set the parent multidimensional array key to 0. 
$pr = 0; 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    # Count the total keys in the row. 
    $count = count($data); 
    # Populate the multidimensional array. 
    for ($x = 0; $x < $count; $x++) { 
     $brim[$pr][$x] = $data[$x]; 
    } 
$pr++; 
    } 
fclose($handle); 

}

그 후, 내가 필요로하는 요소를 추출하고 다른 배열에 넣어 : 그건 내가 그렇게 쓴 코드입니다. 해당 배열은 새로운 .csv 파일의 내용이됩니다.

 $parserCsv = array(); 
     $dip=1; 
     do { 
     $region = $brim[$dip][7]; 
     $sex = $brim[$dip][8]; 
     $frequency = $brim[$dip][9]; 
     $value = $brim[$dip][10]; 
     $parserCsv[] = array($region, $sex, $frequency, $value); 
     $dip++; 
     } while($dip <= 6336); 

이이있다 "위해 var_dump()"배열 :

Array(
[0] => Piemonte 
[1] => maschi 
[2] => 2005 
[3] => 16.972) 

I 어레이의 콘텐츠를 저장할 시도

는 코드 해당 스크립트와 함께 fputcsv() 메소드를 사용하여 $ parserCsv :

$fp = fopen('csvExtract.csv', 'w'); 
foreach ($parserCsv as $fields) { 
    fputcsv($fp, $fields); 
} 
fclose($fp); 

하지만 작동하지 않았습니다. csvExtract.csv 파일의 내용이 비어 있습니다. 나는 내 실수를 이해하지 못한다. $ parserCsv와 같은 다른 솔루션을 만들려고 노력했다.

$parserCsv = array(
    array($region), array($sex), array($frequency), array($value)); 

아무 것도 변경되지 않았다. 누군가 조언을 해줄 수 있습니까?

EDIT : mkjasinski가 제안한 해결책으로 코드를 편집했습니다! 코드가 작동 중입니다. 모든 답장을 보내 주셔서 감사합니다.

브루스

+0

디렉토리에 대한 쓰기 권한이 있습니까? – Pitchinnate

+0

예. 있습니다. 저는 스크립트가 실행중인 서버의 소유자입니다. – Bebbolin

답변

1

4 기록에 진입이 시도 :

if (($handle = fopen("dateRegion.csv", "r")) !== FALSE) { 
    # Set the parent multidimensional array key to 0. 
    $pr = 0; 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     # Count the total keys in the row. 
     $count = count($data); 
     # Populate the multidimensional array. 
     for ($x = 0; $x < $count; $x++) { 
      $brim[$pr][$x] = $data[$x]; 
     } 
     $pr++; 
    } 
    fclose($handle); 
} 

을이 :

$parserCsv = array(); 
$dip=1; 
do { 
    $region = $brim[$dip][7]; 
    $sex = $brim[$dip][8]; 
    $frequency = $brim[$dip][9]; 
    $value = $brim[$dip][10]; 
    $parserCsv[] = array($region, $sex, $frequency, $value); 
    $dip++; 
} while($dip <= 6336); 

및 저장 :

$fp = fopen('csvExtract.csv', 'w'); 
foreach ($parserCsv as $fields) { 
    fputcsv($fp, $fields); 
} 
fclose($fp); 
+0

그것은 작동합니다. 나는 내 실수를 이해합니다. 고마워요 mkjasinski! – Bebbolin

0

몇 가지 오류가 발생합니까? 다른 소프트웨어에서 파일이 열려 있습니까? (? MS Excel과 같은)

다음 코드는 CSV

$parserCsv = array(
    array('Piemonte'), 
    array('maschi'), 
    array(2005), 
    array(16.972) 
); 

$fp = fopen('blah.csv', 'w'); 
foreach($parserCsv as $fields) 
{ 
    fputcsv($fp, $fields); 
} 
fclose($fp); 
+0

안녕하세요, Ejay, 답장을 보내 주셔서 감사합니다. 게시 한 코드에 오류가 없습니다. 나는 이미 그런 식으로 시도했고 그것은 효과가있다. 나는 왜 내가 배열 요소 $ parserCsv를 (필자가 필요로하는 요소만으로) fputcsv 메서드에주는 지 이해하지 못한다. 제대로 작동하지 않는다. 어떤 아이디어? – Bebbolin

+0

함수에 대한 [fput_csv] (http://www.php.net/manual/en/function.fputcsv.php) 초의 인수가 배열이어야합니다. 첫 번째 예제에서는'String'을 제공합니다. – Ejaz

+0

'foreach' 블록 안에있는'foreach ($ parserCsv as fields)'''$ fields'는 원래 코드의'String'입니다. – Ejaz