【问题标题】:Update a CSV file with php [closed]使用 php 更新 CSV 文件 [关闭]
【发布时间】:2016-01-10 15:06:27
【问题描述】:

这些是我的数据库:

数据库.csv:

barcode,      Name     , Qty ,Code
123456 ,Rothmans Blue  , 40  ,RB44
234567 ,Rothmans Red   , 40  ,RB30
345678 ,Rothmans Green , 40  ,RB20
456789 ,Rothmans Purple, 40  ,RB10
567890 ,Rothmans Orange, 40  ,RB55

stocktakemain.csv:

barcode,      Name     , Qty ,Code,ScQty
123456 ,Rothmans Blue  , 40  ,RB44,  1
234567 ,Rothmans Red   , 40  ,RB30,  1

流程:

  1. 网站有一个输入扫描张贴到“条形码”。
  2. 它将检查条形码是否存在于“database.csv”中
  3. 如果条形码存在且不在“stocktakemain.csv”中,它将添加到 ScQty 为 1 的“stocktakemain.csv”中。请参阅下面代码中的第 2 部分。
  4. ELSE 扫描 stocktakemain.csv 中的现有条形码时,将带有 +1(加 1)的“stocktakemain.csv”附加到该特定行的 ScQty。

上面的粗体字不起作用

代码:

function searchForBarcode($id, $array)
{
   foreach ($array as $key => $val)
   {
        if (in_array($id, $val))
        {
            return $key;
        }
   }
   return null;
}

$post = $_POST["barcode"];
$dbcsv = fopen('databases/database.csv', 'r');
$csvArray = array();
while(! feof($dbcsv))
  {
      $csvArray[]  = fgetcsv($dbcsv);
  }
fclose($dbcsv);
$searchf = searchForBarcode($post, $csvArray);
$result = $csvArray[$searchf];
$final = $result[+3];

if ($searchf !== NULL){
$stcsv = fopen('databases/stocktakemain.csv', 'r+');
$stArray = array();
while(! feof($stcsv))
  {
      $stArray[]  = fgetcsv($stcsv);
  }
fclose($stcsv);

$searchs = searchForBarcode($post, $stArray);

if ($searchs === NULL) {
    $filew = 'databases/stocktakemain.csv';
    $write = file_get_contents($filew);
    $write .= print_r(implode(",",$result), true).",1\n";
    file_put_contents($filew, $write);
}
else {
    $filew = 'databases/stocktakemain.csv';
    $resultexisting = $stArray[$searchs];
    print_r($resultexisting);
    echo "<br/>";
    $getfilecont = file_get_contents($filew);
    $getfilecont = trim($getfilecont);
    $existing = explode(",", $getfilecont);
    $existing[4] = trim($existing[4]);
    ++$existing[4];
    print_r($existing);
    echo "<br/>";
    $writeto = print_r(implode(",",$existing), true);
    print_r($writeto);
    file_put_contents($filew, $writeto);
}
}

【问题讨论】:

  • 当您当前运行它并扫描 stocktakemain.csv 中已经存在的内容时,它是否会增加 stocktakemain.csv 中的任何 ScQty?还是什么都不做?还是报错?
  • 是的,但如果其中有多个值,则在重写时将不包含它们。
  • 它是否进入 else 部分 $searchs @atomapps 的价值是什么
  • HI @saurabhkamble ,$searchs 确定扫描的条形码是否存在于“stocktakemain.csv”中。如果返回“null”,它将向“stocktakmain.csv”写入一个新行,否则,运行 ELSE 语句。这就是问题所在。

标签: php html arrays function fopen


【解决方案1】:

以下是我通过阅读您的代码得出的一些结论:

  • 如果扫描的项目已经在 stocktakemain.csv 文件中,则执行 else 块
  • $searchs 包含已扫描项目所在行的索引
  • $stArray 包含 stocktakemain.csv 内容的二维数组 - 第一个索引是行号,从 0 开始,下一个索引是列号

基于此,我认为您需要将 else 块重写为:

$scQtyColumn = 4;

// what is the current quantity? 
$scQty = intval($stArray[$searchs][$scQtyColumn]);

// update the quantity in the stocktakemain.csv contents array
$stArray[$searchs][$scQtyColumn] = $scQty + 1;

// write each line to file
$output = fopen('databases/stocktakemain.csv', 'w');
foreach($stArray, $line) {
  fputcsv($output, $line);
}

你能试试看它是否有效吗?

【讨论】:

  • 嗨,亚历克斯,感谢您的回复。 $stArray 不是 2D,请查看包含完整代码的更新问题 :)
  • 你确定吗?我相信$stArray[] = fgetcsv($stcsv); 将 fgetcsv 的返回值添加到数组 $stArray 中的新元素中。从fgetcsv returns an array 开始,您将为 CSV 文件中的每一行添加一个数组。然后你可以使用$stArray[$lineNumber][$columnNumber]。请参阅stackoverflow.com/questions/6892148/… 的已接受答案
  • 难以置信...你是正确的。非常感谢...比我预期的要简单得多...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
相关资源
最近更新 更多