ham csv veri ile açık dosya, dizi ve Subarray, değişim hattı patlayabilir, ve o kadar geri paketi ve PHP, kaydetmek

1 Cevap php

Amacım burada%% (alan terminatör) tarafından daha sonra, temp.php açmak # # # (line terminatör) tarafından patlayabilir. Belirli bir hat üzerinde, daha sonra tekrar her şeyi birlikte çökmek ve kaydetmek, belirli bir alanını değiştirin.

Birkaç değişkenler Burada oyun vardır:

row = the target row number
target = the target field/column number
nfv = the info that i want to place into the target field

I istenen satırı almak kadar sayacını kullanarak Im $i saymak. Benim istenen alan / hedef almak til sonra sayaç $j saymak. Şimdiye kadar bu bana geçersiz implode argümanlar için bir hata veriyor, ya da herhangi bir veri kaydetmek değildir. Im emin yanlış bir kaç şey vardır, ama sinirli ve kayıp duyuyorum.

<?
$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");
?>

Birisi bu neyin yanlış olduğunu söyleyebilir, onun değil çalışma neden bu kadar i öğrenebilirsiniz ayrıntılı olarak lütfen.

İşte test için bazı örnek csv veri

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###

1 Cevap

Aşağıdaki çalışmalıdır. Bu da gereksiz loop bir sürü ortadan kaldırır

<?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");
?>

Satır sayısal neyse zaten endeksli olduğu gibi yapıyordun döngü çıkarıldı. Ne istediğinizi bulana kadar doğrudan dizi elemanını erişme elemanları aracılığıyla döngü daha hızlıdır.