[RESOLU] Comparer deux tableaux associatifs et associer les valeurs

Petit nouveau ! | 3 Messages

19 juin 2021, 20:28

Hello !

Je viens vous demander conseil. Voici mon code :
Code : Tout sélectionner

Code : Tout sélectionner

if ($monfichier = fopen($urlcsv, 'r')) { $row = 1; $ref = []; // Get REF and QTY to the csv file, associate key value in array while (($ligne = fgetcsv($monfichier, 1000, ";")) !== FALSE) { if (!empty($ligne[2])) { $ref[] = [$ligne[2] => intval($ligne[6])]; } $row++; } // Delete first entrie $refs = array_shift($ref); $product_ref = []; for ($i = 0; $i < count($ref); $i++) { foreach ($db->query("SELECT reference, id_product FROM ps_product WHERE reference = '" . key($ref[$i]) . "' AND id_supplier = '2'") as $row) { $product_ref[] = [$row["reference"] => $row["id_product"]]; } if (in_array($product_ref[$i]["ref"], $ref)) { var_dump($ref[$i]); } } // $product_ref is an array who contain ref and id // get values in array 1 // get values in array 2 // verify if the values in array 1 is in array 2 // add values in array 1 in array 2 $db = null; fclose($monfichier); /*$fichierecriture = fopen("fichier.csv", 'w'); fputs($fichierecriture, $newcontenu); fclose($fichierecriture);*/ }
Vous l'aurez sans doute compris, admettons le tableau un contient : ["ref" => 11651, "qty" => 4]
Le tableau deux : ["ref" => 11651, "id_product" => 35002]

Mon souhait est de faire le tableau : ["ref" => 11651, "id_product" => 35002, "qty" => 4]

J'ai le nez dans le guidon, je ne suis pas objectif. Pouvez vous m'aider s'il vous plaît ? :priere:

(si besoin de plus d'informations, aucun soucis)

Mammouth du PHP | 2703 Messages

20 juin 2021, 00:40

ne faire qu'une seule boucle, le while du parcours du csv. dans la boucle, faire la requête sql (idéalement avec une requête préparée) dans le while, afin d'avoir les 3 infos. ajouter ces 3 infos au tableau dans le format souhaité.

Petit nouveau ! | 3 Messages

20 juin 2021, 08:58

Je vais tester ça, merci. 🙂

Petit nouveau ! | 3 Messages

21 juin 2021, 06:20

ne faire qu'une seule boucle, le while du parcours du csv. dans la boucle, faire la requête sql (idéalement avec une requête préparée) dans le while, afin d'avoir les 3 infos. ajouter ces 3 infos au tableau dans le format souhaité.
Effectivement, c'est bien en passant par la boucle while:

Code : Tout sélectionner

if ($monfichier = fopen($url_file, 'r')) { $row = 1; $ref = []; $product_ref = []; $req = $db->prepare('SELECT reference, id_product FROM ps_product WHERE reference = ? AND id_supplier = 2'); // Get REF and QTY to the csv file, associate key value in array while (($ligne = fgetcsv($monfichier, 1000, ";")) !== FALSE) { if (!empty($ligne[2])) { $req->execute([$ligne[2]]); $datas = $req->fetch(); if (!is_null($datas['id_product'])) { $product_ref[] = ["id" => $datas['id_product'], "qty" => $ligne[6]]; } } $row++; } $req->closeCursor(); $sql = "UPDATE ps_stock_available SET quantity = :qty WHERE id_product = :id"; for ($i = 0; $i < count($product_ref); $i++) { $data = [ "qty" => $product_ref[$i]["qty"], "id" => $product_ref[$i]["id"], ]; $db->prepare($sql)->execute($data); } $db = null; fclose($monfichier); }
Encore merci !

https://fr.wikipedia.org/wiki/Merci_(mot)

Mammouth du PHP | 2703 Messages

21 juin 2021, 14:44

faire 2 boucles n'a aucun intéret dans ce code. l'update peut très bien se faire une fois le select effectué, dans le while du csv.