2009-10-27 2 views
0

내 목표는 temp.php를 열고 ### (줄 종결 자)로 폭발 한 다음 %% (필드 종결 자). 특정 라인의 특정 필드를 변경 한 다음 모든 것을 다시 집어 넣고 저장하십시오.원시 csv 데이터가있는 파일 열기, 배열 및 하위 배열 분해, 줄 바꾸기 및 PHP 팩 저장 및 다시 작성

여기 놀이에 몇 가지 변수가있다 : 내가 대상 필드에 배치 할

row = 대상 행 번호
target = 대상 필드/열 번호
nfv = '정보'는

나는 희망하는 행에 도착할 때까지 카운터 $i을 사용하여 계산합니다. 그런 다음 카운터 $j을 계산하여 원하는 필드/타겟에 도달합니다. 지금까지 이것은 잘못된 implode 인수에 대한 오류를 제공하거나 데이터를 전혀 저장하지 않습니다. Im는 틀린 한 쌍의 물건이있다라고 확신한다. 그러나 나는 좌절되고, 잃어버린다.

<? 
$row = $_GET['row']; 
$nfv = $_GET['nfv']; 
$target = $_GET['target']; 
$data = file_get_contents("temp.php"); 
$csvpre = explode("###", $data); 
$i = 0; 
$j = 0; 
    foreach ($csvpre AS $key => $value){ 
     $i++; 
     if($i == $row){ 
      $info = explode("%%", $value); 
       foreach ($info as $key => $value){ 
        $j++; 
         if($j == "$target"){ 
          $value = $nfv; 
         } 
       } 
      $csvpre[$key] = implode("%%", $info); 
     }   
    } 


$save = implode("###", $csvpre); 
$fh = fopen("temp.php", 'w') or die("can't open file"); 
fwrite($fh, $save); 
fclose($fh); 
header("Location: data.php"); 
?> 

누군가가이 문제가 무엇인지 알 수 있다면 자세한 내용을 자세히 설명하면 작동하지 않는 이유를 알 수 있습니다. 여기

는 다음과 같은 작업을해야 테스트

1%%4%%Team%%40%%75###2%%4%%Individual%%15%%35###3%%4%%Stunt Group%%50%%150###4%%4%%Coed Partner Stunt%%50%%150###5%%4%%Mascot%%15%%35###6%%8%%Team%%40%%75###7%%8%%Stunt Group%%50%%150###8%%8%%Coed Partner Stunt%%50%%150###9%%3%%Team%%40%%75###10%%1%%Team%%40%%75###11%%1%%Solo%%15%%35###12%%1%%Duet%%50%%150###13%%2%%Team%%50%%50###14%%2%%Solo%%15%%35###15%%2%%Duet%%50%%150###16%%8%%Individual%%15%%35### 
+0

아직 질문하지 않았습니까? http://stackoverflow.com/questions/1629230/invalid-argument-when-imploding-in-php – cletus

+2

도움이되지 않을까 궁금합니다 ... 값에 %% 구분 기호가 있음을 알고 있다면 왜 단순한'str_replace ("%% $ target %%", "%% $ nfv %% , $ file_as_string)'? – Anthony

+0

@anthony, $ target은 필드의 값이 아니라 필드의 값입니다 –

답변

1

에 대한 몇 가지 샘플 CSV 데이터입니다. 이렇게하면 많은 불필요한 반복이 제거됩니다.

<?php 
$row = $_GET['row']; 
$nfv = $_GET['nfv']; 
$target = $_GET['target']; 
$data = file_get_contents("temp.php"); 
$csvpre = explode("###", $data); 

//removed i and j. unnecessary. 

//checks if the row exists. simple precaution 
if (isset($csvpre[$row])) 
{ 
    //temporary variable, $target_row. just for readability. 
    $target_row = $csvpre[$row]; 

    $info = explode("%%", $target_row); 

    //check if the target field exists. just another precaution. 
    if (isset($info[$target])) 
    { 
    $info[$target] = $nfv; 
    } 
    //same as yours. just pack it back together. 
    $csvpre[$row] = implode("%%", $info); 
} 


$save = implode("###", $csvpre); 
$fh = fopen("temp.php", 'w') or die("can't open file"); 
fwrite($fh, $save); 
fclose($fh); 
header("Location: data.php"); 
?> 

어쨌든 행이 수치 적으로 색인화되었으므로 제거 작업이 제거되었습니다. 배열 요소에 직접 액세스하는 것은 원하는 것을 찾을 때까지 요소를 반복하는 것보다 훨씬 빠릅니다.

+0

당신이 무엇을했는지, 왜 그렇게했는지에 대해 좀 더 자세히 설명해 주시겠습니까? btw를 가져 주셔서 감사합니다. – mrpatg

+0

나는 이것을 시도했는데, 무슨 일이 일어나고있는 건지 1 ​​행과 나의 목표를 selcect라고합니다. 그리고 행/대상 지정되어 업데이트되지 않습니다. 그것의 행에 6 # 퍼팅 것 같습니다.하지만 또한 내 업데이트 된 정보를 어디서나 참조하십시오 (nfv 값) – mrpatg

+0

'$ info = explode ("% % ", $ value);'편집시 수정했습니다. $ info = explode ("%% ", $ targ et_row); ' –