Ich habe den folgenden Code, mit dem ich eine CSV-Datei aus einer Datenbank generieren kann.
<?php require_once 'dbconfig.php'; try { $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); $sql = 'SELECT o.id_order ,c.id_customer, c.firstname, c.lastname, a.address1, a.address2, a.postcode, a.city,a.phone,c.email,a.phone_mobile, od.product_id, od.product_name,od.product_quantity, od.product_price,o.total_paid_tax_incl, c.id_customer, op.date_add, op.amount, op.payment_method FROM mod582_orders o INNER JOIN mod582_customer c ON o.id_customer = c.id_customer INNER JOIN mod582_address a ON o.id_address_delivery = a.id_address INNER JOIN mod582_order_detail od ON o.id_order = od.id_order INNER JOIN mod582_order_payment op ON o.reference = op.order_reference WHERE CAST(o.date_add AS DATE) LIKE "2023-01%" /*CAST( curdate() AS DATE)*/; '; $r = $pdo->query($sql); $tab = \[\]; $tab\[\] = \['ORDNOORDER', 'ORDREFCUSORDER', 'ORDNOCOSTNUMBER','ORDNOCUSTOMER','ORDCUSTOMERCODE','ORDCUSCAT','ORDTYPE','ORDCURRENCY','ORDCURRENCYRATE','ORDDESIGNATION','ORDREPCODE','ORDPORT','ORDPORTTYPE','ORDPORTRATE','DEONOORDER','DEOCOMMENT','DEOCOUNTRY','DEONAME','DEOFIRSTNAME','DEOADDRESS1','DEOADDRESS2','DEOZIPCODE','DEOCITY','DEOPHONE','DEOMAIL','DEOPHONEPORTABLE','ODLNOORDER','ODLNOORDERLINE','ODLNOARTICLE','ODLARTDESIGN','ODLQUANTITYORDER','ODLTTCCURUPRICE','ODLCODEPARCELLEFLEU','PAYNUMPAYMENT','PAYNOCUSTOMER','PAYNOORDER','PAYNOCURRENCY','PAYDATEPAYMENT','PAYPAYMENTTTCCUR','PAYCURRENCYRATE','PAYCONTREPARTIE'\]; $odrline = 1; while($rs = $r-\>fetch(PDO::FETCH_ASSOC)){ $tab\[\] = \[$rs\['id_order'\], $rs\['id_order'\], '17', '', 'AAA'.$rs\['id_customer'\],'DET','O','EUR','1','','115','D','P','17', $rs\['id_order'\],'','FRA', $rs\['firstname'\], $rs\['lastname'\], $rs\['adress1'\], $rs\['adress2'\], $rs\['postcode'\], $rs\['city'\], $rs\['phone'\], $rs\['email'\], $rs\['phone_modile'\], $rs\['id_order'\],$odrline, $rs\['product_id'\], $rs\['product_name'\], $rs\['product_quantity'\], $rs\['product_price'\],'','','', $rs\['id_order'\],'EUR', $rs\['date_add'\], $rs\['amount'\],'1','VIR'\]; } $fichier_csv = new SplFileObject('vinistoria/commandes.csv', 'w'); foreach($tab as $ligne){ $fichier_csv-\>fputcsv($ligne, ';'); } $date = date('d-m-y h:i:s'); echo "nouveau fichier commandes.csv créé à ". $date; } catch (PDOException $e) { die("Could not connect to the database $dbname :" . $e-\>getMessage()); } ?\>
Ich habe jedoch einige Felder, die basierend auf den Feldwerten in der vorherigen Zeile der CSV ge?ndert werden müssen. Zum Beispiel : Für alle Zeilen, in denen $rs['id_order'] den Wert 486 hat, ist mein Odrline-Wert 1, aber wenn in der n?chsten Zeile $rs['id_order'] 487 ist, sollte Odrline 2 usw. sein.
Wie kann ich meine Datei durchsuchen und den Wert basierend auf dem Feld in der vorherigen Zeile ?ndern?
Wie kann ich meine Datei durchsuchen und den Wert basierend auf dem Feld in der vorherigen Zeile ?ndern?
不要在創(chuàng)建文件后通過文件來更改數(shù)據(jù),而是在創(chuàng)建文件之前處理數(shù)據(jù)。
將 id_order
存儲在變量中,并在每次循環(huán)迭代開始時進行比較。
類似于:
$odrline = 0; // start with zero, as incremented before first written out $prevordernumber = 0; // pick a number that is not a valid order number // or empty string if not numeric while($rs = $r->fetch(PDO::FETCH_ASSOC)){ // if order number has changed then increment order line if($prevordernumber != $rs['id_order']) $odrline++; $tab [] = ........ // update stored previous order number $prevordernumber = $rs['id_order']; } // write $tab to file $fichier_csv = new SplFileObject('vinistoria/commandes.csv', 'w'); foreach($tab as $ligne){ $fichier_csv-\>fputcsv($ligne, ';');