J'ai le code suivant qui me permet de générer un fichier csv à partir d'une base de données.
<?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()); } ?\>
Cependant, j'ai certains champs qui doivent être modifiés en fonction des valeurs des champs dans la ligne précédente du csv. Par exemple : Pour toutes les lignes où $rs['id_order'] a la valeur 486, ma valeur odrline est 1, mais si dans la ligne suivante $rs['id_order'] est 487, odrline devrait être 2 etc..
Comment puis-je parcourir mon fichier et modifier la valeur en fonction du champ de la ligne précédente ?
Comment puis-je parcourir mon fichier et modifier la valeur en fonction du champ de la ligne précédente ?
Ne modifiez pas les données via un fichier après l'avoir créé, traitez plutôt les données avant de créer le fichier.
Stockez
id_order
dans une variable et comparez-la au début de chaque itération de boucle.Semblable à :