Page 1 sur 1

Comparer deux tableaux associatifs et associer les valeurs

Posté : 19 juin 2021, 20:28
par adeveloppeur
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)

Re: Comparer deux tableaux associatifs et associer les valeurs

Posté : 20 juin 2021, 00:40
par or 1
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é.

Re: Comparer deux tableaux associatifs et associer les valeurs

Posté : 20 juin 2021, 08:58
par adeveloppeur
Je vais tester ça, merci. 🙂

Re: Comparer deux tableaux associatifs et associer les valeurs

Posté : 21 juin 2021, 06:20
par adeveloppeur
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)

Re: [RESOLU] Comparer deux tableaux associatifs et associer les valeurs

Posté : 21 juin 2021, 14:44
par or 1
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.